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