这有什么价值?

时间:2014-01-18 07:30:02

标签: javascript

我想弄清楚我的上一个函数(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不起作用。

1 个答案:

答案 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,无论这两种情况如何。


Read the MDN documentation for more information about this