按照我的代码,
Apple通过原型定义功能
Banana是按类属性定义函数。
var Apple = function(){}
Apple.prototype.say = function(){
console.debug('HelloWorld');
}
var Banana = function(){
this.say = function(){
console.debug('HelloWorld');
}
}
var a = new Apple();
var b = new Banana();
a.say();
b.say();
这些不同吗?
答案 0 :(得分:66)
当您创建Apple的多个实例时,内存中仍然只有一个say()
实例。但是,当您创建多个Banana实例时,最终会创建许多say()
函数的实例。
这就是原型节省内存的原因。您还可以避免创建和分配say()
函数的处理成本。
此外,如果更改父对象的属性,如果子对象未替换该属性,则可以从子对象中看到更改。
答案 1 :(得分:2)
原型成员就像类membeprototype成员一样,类成员,而当你定义它的其他方式时它不是类成员。因此,如果您创建Apple的许多对象,则所有将共享相同的功能,而在banana的情况下,每个对象都将拥有自己的功能副本。 将Javascript中的原型视为C#中的静态。