Possible Duplicate:
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;
}
}
那么,由于代码重用和继承,您应该使用原型(prototype)。
基本上,如果您将一个方法绑定(bind)到 this
关键字,那么您只是将该方法提供给该特定实例,而使用原型(prototype)时,您将为该类的所有实例编写该方法。
例如:
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
都是人(同一类的实例),但他们的行为不同,因为他们有自己的一套规则(方法)他们依靠。
如果您要使用原型(prototype):
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!";
};
现在,你们所有人的行为都一样。
使用原型(prototype)继承有利于代码重用,并且不会将不必要的重复内容加载到内存中。 + 以这种方式更新类要容易得多。