有人可以使用构造函数解释下面两个代码的差异。他们都给出了相同的结果。一个人比另一个人有优势吗?
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?
答案 0 :(得分:2)
他们正在做一些不同的事情。
第一个是在构造函数的每次调用时为原型分配相同的细节。这些细节将由通过此构造函数创建的每个对象共享。这绝对不是你应该做的。通常,只应将方法添加到原型中,并且绝对不在构造函数体内。它应该在构造函数之外发生(它只是不必要地运行无意义的代码,并且会让其他开发人员感到困惑)。
第二,这些属性是返回的构造对象的本地属性,在该上下文中为this
。这是拥有实例属性的正确方法。