【发布时间】:2012-10-03 07:00:13
【问题描述】:
可能重复:
Use of ‘prototype’ vs. ‘this’ in Javascript?
Advantages of using prototype, vs defining methods straight in the constructor?
我正在学习 Javascript 中的原型。我不太明白的一件事是为什么我应该使用CONSTRUCTOR_FN.prototype.METHOD_NAME 约定添加一个函数,而不是在CONSTRUCTOR 的主体中使用this.METHOD_NAME?
我写了这个小代码来澄清一下:
function Cat ( name ) {
this._name = name;
this.say = function ( thing ) {
alert( this._name + " says: '" + thing + "'" );
}
}
function Dog ( name ) {
this._name = name;
}
Dog.prototype.say = function ( thing ) {
alert( this._name + " says: '" + thing + "'" );
}
var c = new Cat( "Mitt");
var d = new Dog( "Barak" );
c.say( "War" );
d.say( "No war" );
据我所知,Cat 和 Dog 构造函数的工作方式相同。如果我从this question 中理解正确,唯一的区别是当您向原型添加某些内容时,该构造函数中的所有对象都将拥有它。还有其他原因吗?
【问题讨论】:
-
没有其他原因,但它是一种更好的编程模式,并且在创建多个实例时效率更高。这还不够吗?
-
你的意思是当有 1000 个
Dog实例时,它们都使用相同的say()方法,而对于 1000 个Cat实例,我们将有 1000 个say()函数的副本?
标签: javascript