This is an old revision of the document!
En JavaScript, todo objeto tiene una propiedad proto que referencia el objeto al cual el objeto delega. Por defecto, el padre de cada objeto es Object:
> o = {} > o.__proto__ Object
Que es Object? una función nativa:
> Object function Object() { [native code] }
La propiedad proto se puede setear explicitamente para especificar quien es el objeto padre:
> o.x undefined > o.__proto__ = { x : 10 } > o.x 10
También se puede especificar el padre en la sintaxis literal:
> a = { x : 10 } > b = { y : 20, __proto__ : a } > b.x 10
Las funciones son objetos, entonces tienen un proto, el cual por defecto es una función con cuerpo vacío:
> f = function (x) { return x; } > f.__proto__ function Empty() {} > f.__proto__() undefined
Como una función es un objeto, también puede delegar a otro objeto:
> f.__proto__ = { x : 10 } > f.x 10
Una función no solamente parte con proto, sino que ademas parte con una propiedad llamada 'prototype'. Esta por defecto apunta a Object. Esta propiedad se usa para setear el proto de los objetos creados via 'new' con esta función:
> f = function() {} > f.prototype Object > o = new f > o.__proto__ Object
Ojo que reasignar el 'prototype' de una función no afecta el proto de los objetos ya creados a partir de esa función. Pero si, mutar este 'prototype' afecta los objetos ya creados.
> f.prototype = { x : 10 } > o2 = new f > o.x undefined > o2.x 10 > f.prototype.y = 20 > o2.y 20