2014-01-18 2 views
2

Я пытаюсь выяснить, что это означает в моей последней функции (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(); 

затем this относится к mammal.


Но в обоих случаях вы обращаетесь к же свойство, так как каждый экземпляр Mammal наследует свойства Mammal.protoype. Итак, this.constructor === Mammal.prototype.constructor, независимо от того, в какой ситуации эти два.


Read the MDN documentation for more information about this.

Смежные вопросы