可能重复:
Advantages of using prototype, vs defining methods straight in the constructor?
为什么要使用:
Person.prototype.toString = function() { return this.name; }
在
Function Person(name) {
this.name = name;
this.toString = function() {
return this.name;
}
}
答案 0 :(得分:4)
嗯,你应该使用原型,因为代码重用和继承
基本上,如果将方法绑定到this
关键字,则只将该方法提供给该特定实例,而使用原型时,可以为该类的所有实例编写方法。
例如:
function Person(name) {
this.name = name;
this.toString = function() {
return this.name;
}
}
var bob = new Person('Bob');
var jim = new Person('Jim');
jim.toString = function() {
return "I have amnesia, I forgot my name!";
};
现在,尽管bob
和jim
都是人(同一个类的实例),但它们的行为却不同,因为它们有自己依赖的规则(方法)。 />
如果您要使用原型:
function Person(name) {
this.setName(name);
}
Person.prototype = {
name : 'default name',
setName : function(name) {
this.name = name;
},
toString : function() {
return this.name;
}
};
var bob = new Person('Bob');
var jim = new Person('Jim');
Person.prototype.toString = function() {
return "I have amnesia, I forgot my name!";
};
现在,你所有的人都表现得一样 使用原型继承有利于代码重用,并且不会使用不必要的重复内容加载内存。 +通过这种方式更新类就更容易了。
答案 1 :(得分:2)
一个原因是因为它会将该函数更新/添加到已经创建的那种类型的对象中。
function Person(name) {
this.name = name;
}
var person = new Person("Test");
alert(person.toString()); // alerts [object Object]
Person.prototype.toString = function() {
return this.name;
};
alert(person.toString()); // alerts Test
答案 2 :(得分:1)
在javascript中,方法是对象。在第二个Person构造函数中,您将为Person的每个实例创建一个新的toString函数实例。通过使用原型对象,只有一个toString函数的实例将在Person的所有实例之间共享。