2011-03-01 48 views
6

Bir JavaScript sınıfım var:Bu ne anlama geliyor?

function Person(n){ 
    // ... 
} 

Sınıfın dışında şu kodum var:

Person.prototype.shower = function(){ this.dirtFactor=2 } 

Yukarıdaki kodda this ne ifade eder? Xzx17 veya Person sınıfına mı atıf yapar?

cevap

1

Tamam, temelleri ilk: Eğer function Person(o) { ... } yazarken, bir sınıf ilan değil vardır - JavaScript sınıf temelli fakatnesne tabanlı etmez. Bu ifade basitçe bir işlevi (bu arada, nesneler de olan) bildirir.

Daha sonra, bu gibi bir nesne oluşturmak: yapıcı (türlü) bir nesne, oluştururken

var mellon = new Person('Mellon'); 

Person olup.

Şimdi, bu yazıyı dikkatlice okuyun: 'ın yapıcı Person olduğunu Person tüm yöntemler' beri lar prototype nesne satışa sunulacak.

Yazdığınız Yani eğer:

Person.prototype.shower = function(){ this.dirtFactor=2 } 

sonra yöntem mellon.shower() satışa sunulacak.

Bu konuyla ilgili bazı ayrıntılar için Mozilla's intro to OOP in Javascript'dan geçmenizi öneririm.


Yani soruyu cevaplamak için: this yöntem shower çağrıldığı ile nesneyi ifade eder. Yukarıdaki durumda, olacaktır.

1

O

Yani kişinin örneği ifade alan işlevi

için atanır
1

Size çağrı fonksiyonu, bunu tanımlamaz nasıl nasıl this anlamı bağlıdır Kişi sınıfına

 
    var instance = new Person(...); 

    instance.shower(); // Here will be this.dirtFactor assigned to instance.dirtFactor 
4

bir örneğine reffers.

Eğer böyle bir şey yapmak varsayarsak:

var bob = new Person('whatever n is'); 
bob.shower(); 

Sonra this olacak bob (Person bir örneği olur ki).

+0

+1, fakat açıklığa kavuşmak gerekirse, 'bu', çağrıldıktan sonra '.' öncesi olana işaret eder. Eğer '.' olmadan çağrılırsa, o zaman bu' '' '' '' '' '' '' '' '' '' 'varsayılanıdır. –

+1

Duş işlevini 'function() {console.log (this) ile değiştirerek kanıtlanabilir; } '. – kim3er

+0

@ Box9 'this', geçerli bağlamı ifade eder. 'bu', varsayılan olarak' window' nesnesine (tarayıcıda) başvurur. Eklenti/işlev eklediğinizde içerik değişir. – kim3er

1

Bu, üzerinde shower çağrılan nesneye karşılık gelir. Özellikle, en sonunda bu Person işlevi gerçekleştirmek ve yapıcı içinde this olarak erişilebilir olacak yeni, boş bir nesne oluşturur

p = new Person(n); 

yapıyor sona erecek. Bu nesneye daha sonra Person.prototype için bir bağlantı verilecektir ve p başarısız olan herhangi bir öznitelik referansları, orada bulunup bulunmadığını görmek için Person.prototype'a bakacaktır.

üzerinde p.shower() kullanarak çağrılırsa, thisp'a döner. Konu, javascript'te örnek ve sınıf olmamasıdır. Person.prototype bir nesnedir ve Person tarafından oluşturulan tüm nesneler, bir başvuru paylaşır.

Çıkarma prototipler hep birlikte, sadece

person = {'shower': function() { 
    this.dirtFactor = 2; } 
} 

person.shower(); 
console.log(person.dirtFactor); 

yapabilir ve this hala yöntemi denilen bunun üzerine nesnesini ifade ettiğini göreceksiniz.