plodder
plodder

Reputation: 2306

JavaScript: Creating objects based on a prototype without using new + Constructor

is this possible?

My thinking: Prototypes are essentially attributes of the Constructor function (whether native Constructor such as Function, String or Object, or your own custom Constructor) and only the 'new' keyword is able to leverage the Constructor and its prototype for object creation

Am I missing something?

Upvotes: 11

Views: 3028

Answers (1)

Christian C. Salvadó
Christian C. Salvadó

Reputation: 827812

You are right, but now in the ECMAScript 5th Edition, the Object.create method is able to create object instances using another objects as a prototype:

var proto = {foo: 1};
var obj = Object.create(proto);

In the above example, obj will be created and it will contain a reference to proto in the [[Prototype]] internal property, and:

obj.foo; // 1
obj.hasOwnProperty('foo'); // false

This method is from the new specification approved on December 2009, as far I've seen now is available on the Mozilla JavaScript 1.9.3 implementation.

For now you can mimic the behavior of that method by this, as proposed by Douglas Crockford:

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

Upvotes: 12

Related Questions