我正在学习原型。将函数“sayName”放在类中或稍后通过原型添加它会更好吗?或者它是一样的,取决于具体情况?
function Animal(name,numLegs){
this.name = name;
this.numLegs = numLegs;
this.sayName = function(){
console.log("Hi my name is " + this.name);
};
}
var penguin = new Animal("Captain Cook", 2);
penguin.sayName();
或
function Animal(name,numLegs){
this.name = name;
this.numLegs = numLegs;
}
Animal.prototype.sayName = function(){
console.log("Hi my name is " + this.name);
};
var penguin = new Animal("Captain Cook", 2);
penguin.sayName();
答案 0 :(得分:1)
它不一样,因为第一个版本将使用更多内存,因为Animal
的实例具有自己的this.sayName
。在后者中,所有Animal
个实例都可以访问相同的 sayName
:
function Animal(name,numLegs){
this.name = name;
this.numLegs = numLegs;
this.sayName = function(){
console.log("Hi my name is " + this.name);
};
}
var dog = new Animal(4, "Jack");
var alligator = new Animal(4, "Snap");
dog.sayName = function(){ console.log("woof"); }
dog.sayName();
alligator.sayName();
将导致
woof
Hi my name is Snap
因为dog
和alligator
不共享相同的函数sayName
,而后一个示例中对原型的更改会更改sayName
的所有调用。< / p>
答案 1 :(得分:1)
最好将原型用于共享资源
答案 2 :(得分:1)
这个问题已经得到解答 - 这取决于具体情况。阅读此答案:https://stackoverflow.com/a/15497685/783743
如果您的方法需要访问构造函数的私有变量,那么除了在构造函数中定义它之外别无选择。否则,您应该始终在prototype
对象上声明它们。
您还应阅读以下文章: