使用"这个"与" .prototype"在构造函数内部

时间:2014-08-11 01:22:05

标签: javascript prototype

有人可以使用构造函数解释下面两个代码的差异。他们都给出了相同的结果。一个人比另一个人有优势吗?

function Person(){
  Person.prototype.name = "Nicholas";
  Person.prototype.age = 29;
}

var person1 = new Person();
var person2 = new Person();

person1.name = "Greg";
alert(person1.name);   //"Greg"  from instance
alert(person2.name);   //"Nicholas" from prototype

VERSUS

function Person(){
  this.name = "Nicholas";
  this.age = 29;
}

var person1 = new Person();
var person2 = new Person();

person1.name = "Greg";
alert(person1.name);   // "Greg"  from instance
alert(person2.name);   // "Nicholas" from Person Object?     

1 个答案:

答案 0 :(得分:2)

他们正在做一些不同的事情。

第一个是在构造函数的每次调用时为原型分配相同的细节。这些细节将由通过此构造函数创建的每个对象共享。这绝对不是你应该做的。通常,只应将方法添加到原型中,并且绝对不在构造函数体内。它应该在构造函数之外发生(它只是不必要地运行无意义的代码,并且会让其他开发人员感到困惑)。

第二,这些属性是返回的构造对象的本地属性,在该上下文中为this。这是拥有实例属性的正确方法。