我想弄清楚我的上一个函数(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不起作用。
答案 0 :(得分: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
,无论这两种情况如何。