2010-06-01 17 views
7

Aşağıdaki "çirkinlik" ne yapar? Almayacağım bir şey var ve ne olduğunu anlamada yardımcı olmaktan memnuniyet duyarım.Örnek: "Javascript - İyi Parçalar"


Örneğin, Function.prototype çoğaltarak, biz tüm fonksiyonlar için kullanılabilir bir yöntem yapabilirsiniz:

bir yöntem yöntemi ile Function.prototype artırmada By
Function.prototype.method = function (name, func) { 
    this.prototype[name] = func; 
    return this; 
}; 

, artık yazmak zorunda prototip özelliğinin adı. Bu çirkinlik artık gizlenebilir.

cevap

15

Çirkinlik özneldir, ama görelim.

Genellikle yazın:

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

Sen yeni bir operatör tarafından oluşturulan örneklerine devralınacak istiyorum özelliklere sahip prototype nesneyi bir constructor function uzanır. Eğer Foo kurucu örneğini oluştururken var obj = new Foo(); Örneğin ile

, bu nesne Foo.prototype nesne ve prototype chain daha yüksek diğer nesnelere bağlı olan tüm özellikleri devralır.

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

Temelde sadece gizler: Böyle yöntemini çağırabilirsiniz böylece

Crockford yöntemi, bu yöntem Function.prototype nesne tanımlanır aynısını yapar, tüm fonksiyonlar, bu nesneden devralır Crockford çirkin gördüğü kodundan prototype kelime ...

"iyi Parçaları JavaScript" gerçekten iyi bir kitap, ama kişisel bir perspektiften dayanmaktadır düşünüyorum Douglas Crockfor d dili vardır. kodunu okurken kelime "prototip" kullanma

Ben bir çok şey ile ona katılıyorum, ama ben de bazı yönleri ile katılmıyorum ...

+1

daha açık ve belirgin gözükmektedir. Cevap için teşekkürler :) – Matrym

+2

Katılıyorum. Crockford bu davada yanlış bir ağaç havlıyor IMO. – bobince

İlgili konular