Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Object.create not supported in ie8

Tags:

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!

like image 726
klye_g Avatar asked Aug 02 '13 15:08

klye_g


People also ask

How do you fix an object object error?

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.

What is the syntax of Object defineProperty() method in JavaScript?

Syntax: Object. defineProperty(obj, prop, descriptor)

Why use Object defineProperty?

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).

How to define property in JavaScript class?

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.


1 Answers

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();     }; } 
like image 166
6 revs, 2 users 99% Avatar answered Oct 01 '22 06:10

6 revs, 2 users 99%