我正在创建一个JavaScript构造函数。考虑这个例子:
function Student(name)
{
this.name = name;
}
Student.prototype.printName = function(){
console.log(this.name);
}
var s = new Student("Eden");
s.printName();
上面的代码很有效。但我也可以这样写:
function Student(name)
{
this.name = name;
this.printName = function(){
console.log(this.name);
}
}
var s = new Student("Eden");
s.printName();
我觉得第二种方法是正确的,因为printName
应该是新对象的属性而不是继承属性。添加到prototype
会使其成为继承属性。
为什么开发人员更喜欢第一种方法?
答案 0 :(得分:2)
通过在构造函数中将函数直接附加到this
,这意味着 Student
的每个实例都拥有它自己的printName
副本。这不是非常有效。通过将其附加到prototype
的{{1}}链,只有Student
函数的一个副本,而printName
的任何实例都包含在其中的{/ 1}}原型链中
虽然这两种方法在将对象附加到对象方面存在其他差异,但这是最简单和最容易记住的。
如果您想要完整的原因字典,请参阅this answer一个非常相似的问题。