2010-06-01 23 views
7

¿Qué "fealdad" resuelve el siguiente problema? Hay algo que no entiendo, y agradecería ayuda para entender de qué se trata.Ejemplo de: "Javascript - The Good Parts"


Por ejemplo, mediante el aumento de Function.prototype, podemos hacer un método disponible para todas las funciones:

Function.prototype.method = function (name, func) { 
    this.prototype[name] = func; 
    return this; 
}; 

Al aumentar Function.prototype con un método de método, ya no tenemos que escribir el nombre de la propiedad del prototipo. Ese poco de fealdad ahora puede ocultarse.

Respuesta

15

Bueno, la fealdad es subjetiva, pero veamos.

Por lo general escribe:

function Foo() {} 
Foo.prototype.method1 = function() { /*...*/ }; 
Foo.prototype.method2 = function() { /*...*/ }; 

se extiende el objeto prototype un constructor function con las propiedades que desea ser heredada a las instancias creadas por el nuevo operador.

Por ejemplo con var obj = new Foo(); que está creando una instancia de la Foo constructor, ese objeto heredará todas las propiedades enlaza con el objeto Foo.prototype y otros objetos más altos en el prototype chain.

El método del Crockford hace lo mismo, que el método se define en el objeto Function.prototype, todas las funciones heredan de ese objeto, por lo que se puede llamar al método como este:

function Foo() {} 
Foo.method('method1', function() { /*...*/ }); 
Foo.method('method2', function() { /*...*/ }); 

Básicamente sólo cueros la prototype palabra del código, que Crockford considera fea ...

"JavaScript las partes buenas" es un libro muy bueno, pero creo que se basa en la perspectiva personal que Douglas Crockfor d tiene del lenguaje.

Estoy de acuerdo con él, con un montón de cosas, pero también estoy de acuerdo con algunos aspectos ...

+1

El uso de la palabra "prototipo" parece más explícita y evidente al leer el código. Gracias por la respuesta :) – Matrym

+2

Estoy de acuerdo. Crockford está ladrando el árbol equivocado en este caso IMO. – bobince