I came across an issue with a plugin that uses object.create in jquery to create a date dropdown. I just noticed in IE 8 that it is throwing an error of:
SCRIPT438: Object doesn't support property or method 'create' Here is the code:
var dropdateobj = Object.create(dropdatefuncs); dropdateobj.create(options, this); $.data(this, 'dropdate', dropdateobj); What is a good work around for IE8 or more cross browser compatible?
Thanks in advance!
To fix this, you can use the JSON. stringify() method to change the object into a string that can be popped up in the browser using the alert() method.
Syntax: Object. defineProperty(obj, prop, descriptor)
Object. defineProperty is mainly used to set properties with specific property descriptors (e.g. read-only (constants), enumerability (to not show a property in a for (.. in ..) loop, getters, setters).
defineProperty() Method. The Object. defineProperty() method in JavaScript is a Standard built-in objects which defines a new property directly on an object and returns the object.
If you need Object.create, there are good chances you may need to rely on other es5 features as well. Therefore, in most cases the appropriate solution would be to use es5-shim.
However, if Object.create is the only thing you need and you only use it to purely setup the prototype chain, here's a lightweight poly-fill that doesn't support null as the first argument and doesn't support the second properties argument.
Here's the spec:
15.2.3.5 Object.create ( O [, Properties] )
The create function creates a new object with a specified prototype. When the create function is called, the following steps are taken:
If Type(O) is not Object or Null throw a TypeError exception.
Let obj be the result of creating a new object as if by the expression new Object() where Object is the standard built-in constructor with that name
Set the [[Prototype]] internal property of obj to O.
If the argument Properties is present and not undefined, add own properties to obj as if by calling the standard built-in function Object.defineProperties with arguments obj and Properties.
Return obj.
Here's the lightweight implementation:
if (!Object.create) { Object.create = function(o, properties) { if (typeof o !== 'object' && typeof o !== 'function') throw new TypeError('Object prototype may only be an Object: ' + o); else if (o === null) throw new Error("This browser's implementation of Object.create is a shim and doesn't support 'null' as the first argument."); if (typeof properties != 'undefined') throw new Error("This browser's implementation of Object.create is a shim and doesn't support a second argument."); function F() {} F.prototype = o; return new F(); }; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With