Javascript Object.create not working in Firefox

3.7k views Asked by At

I always get the following exception in Firefox (3.6.14):

TypeError: Object.create is not a function

It is quite confusing because I am pretty sure it is a function and the code works as intended on Chrome.

The lines of code responsible for this behavior are the following:

Object.create( Hand ).init( cardArr );
Object.create( Card ).init( value, suit );

It is from a poker library gaga.js if someone wants to see all the code: https://github.com/SlexAxton/gaga.js

Maybe someone knows how to get it working in Firefox?

3

There are 3 answers

1
Alex Wayne On BEST ANSWER

Object.create() is a new feature of EMCAScript5. Sadly it is not widely supported with native code.

Though you should be able to add non-native support with this snippet.

if (typeof Object.create === 'undefined') {
    Object.create = function (o) { 
        function F() {} 
        F.prototype = o; 
        return new F(); 
    };
}

Which I believe is from Crockford's Javascript: The Good Parts.

0
Felix Kling On

Object.create is part of ES5 and only available in Firefox 4.

As long as you are not doing any add-on development for browsers, you should not expect browsers to implement ES5 features (especially older browsers). You'd have to provide your own implementation then (like the own provided by @Squeegy).

0
vineet On

I use this way(also working in ECMAScript 3):-

function customCreateObject(p) {
   if (p == null) throw TypeError(); // p must be a non-null object
   if (Object.create)  // If Object.create() is defined...
     return Object.create(p);  // then just use it.
   var t = typeof p; // Otherwise do some more type checking
   if (t !== "object" && t !== "function") throw TypeError();
    function f() {}; // Define a dummy constructor function.
   f.prototype = p; // Set its prototype property to p.
   return new f(); // Use f() to create an "heir" of p.
}

var obj = { eid: 1,name:'Xyz' };
customCreateObject(obj);