2014-01-18 103 views
2

我想弄清楚'this'在我最後一個函數(Mamamal.prototype.haveBaby)中引用了什麼?這是什麼價值?

var Mammal = function(name){ 
    this.name = name; 
    this.offspring = []; 
}; 

// var myMammal = new Mammal('Joe'); 

Mammal.prototype.sayHello = function(){ 
    return 'My name is ' + this.name + ", I'm a Mammal"; 
}; 

Mammal.prototype.haveBaby = function(){ 
    debugger; 
    var childName = "Baby " + this.name; 
    baby = new this.constructor(childName); //new Cat OR new Mammal 
    baby.name = childName; 
    this.offspring.push(baby); 
    return baby; 
}; 

我不知道爲什麼語法

baby - new this.constructor(childName); 

this Mammal.prototype?(那麼構造函數,因此這將是Mammal.prototype.constructor(childName);這就是我知道如何設置構造函數的唯一途徑。Mammal.constructor是行不通的。

回答

2

this值取決於功能是如何叫,你的情況Mammal.prototype.haveBaby

如果您使用Mammal.prototype.haveBaby()來調用它,那麼this指的是Mammal.prototype

如果您將它稱爲實例方法(更可能),例如

var mammal = new Mammal(); 
var baby = mammal.haveBaby(); 

然後thismammal


但在這兩種情況下,你正在訪問的相同財產,因爲Mammal每個實例繼承了Mammal.protoype屬性。所以this.constructor === Mammal.prototype.constructor,無論在那兩種情況下。


Read the MDN documentation for more information about this