2010-06-01 6 views
7

Quale "bruttezza" risolve il seguente? C'è qualcosa che non sto ricevendo, e mi farebbe piacere aiutarmi a capire di cosa si tratta.Esempio da: "Javascript - Le buone parti"


Ad esempio, aumentando Function.prototype, possiamo fare un metodo disponibile per tutte le funzioni:

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

Aumentando Function.prototype con un metodo metodo, non è più necessario digitare il nome della proprietà prototipo. Quel po 'di bruttezza può ora essere nascosto.

risposta

15

Bene, la bruttezza è soggettiva, ma vediamo.

Di solito scrivono:

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

di estendere l'oggetto prototype un constructor function con le proprietà che si desidera essere ereditata alle istanze create dal nuovo operatore.

Ad esempio, con var obj = new Foo(); si sta creando un'istanza del costruttore Foo, quell'oggetto erediterà le tutte le proprietà legate all'oggetto Foo.prototype e altri oggetti più alti nel prototype chain.

metodo del Crockford fa lo stesso, il metodo viene definito nell'oggetto Function.prototype, tutte le funzioni ereditano da tale oggetto, in modo da poter chiamare il metodo come questo:

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

E 'fondamentalmente solo pelli la prototype parola dal codice, che considera Crockford brutto ...

"JavaScript le parti buone" è davvero un buon libro, ma penso che si basa sulla prospettiva personale che Douglas Crockfor d ha della lingua.

sono d'accordo con lui con un sacco di cose, ma ho anche in disaccordo con alcuni aspetti ...

+1

Usando la parola "prototipo" sembra più esplicito ed evidente durante la lettura del codice. Grazie per la risposta :) – Matrym

+2

Sono d'accordo. Crockford abbaia dall'albero sbagliato in questo caso IMO. – bobince

Problemi correlati