2010-02-09 6 views

Respuesta

12

Tiene usted razón, pero ahora en el ECMAScript 5ª edición, el método Object.create es capaz de crear instancias de objetos utilizando otros objetos como un prototipo:

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

En el ejemplo anterior, obj se creará y se contendrá una referencia a proto en la propiedad interna [[Prototype]], y:

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

Este método es de la nueva especificación aprobada en diciembre de 2009, por lo que he visto ahora es ava disponible en la implementación Mozilla JavaScript 1.9.3.

Por ahora se puede imitar el comportamiento de ese método por el este, según lo propuesto por Douglas Crockford:

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

Cornford vez propuso una versión ligeramente más eficiente de "engendrar" (por cierto, se ha mencionado inicialmente por Lasse Nielsen, no Crockford), donde la función "ficticia" ("F" en su ejemplo) se almacena en un cierre y luego se reutiliza. Esto permite una implementación más eficiente de la memoria (y del tiempo de ejecución). También tenga en cuenta que la emulación 'Object.create' de Crockford apenas se ajusta a ES5 (no admite el segundo argumento, no verifica el tipo del primer argumento para lanzar TypeError si no es un objeto, etc.). Emplea con cuidado;) – kangax

+0

Eres un salvavidas. Literalmente he estado buscando en la web esta idea todo el día. –

Cuestiones relacionadas