定义函数原型和类属性有什么区别?

时间:2011-05-06 13:58:44

标签: javascript prototype

按照我的代码,
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();

这些不同吗?

2 个答案:

答案 0 :(得分:66)

当您创建Apple的多个实例时,内存中仍然只有一个say()实例。但是,当您创建多个Banana实例时,最终会创建许多say()函数的实例。

这就是原型节省内存的原因。您还可以避免创建和分配say()函数的处理成本。

此外,如果更改父对象的属性,如果子对象未替换该属性,则可以从子对象中看到更改。

答案 1 :(得分:2)

原型成员就像类membeprototype成员一样,类成员,而当你定义它的其他方式时它不是类成员。因此,如果您创建Apple的许多对象,则所有将共享相同的功能,而在banana的情况下,每个对象都将拥有自己的功能副本。  将Javascript中的原型视为C#中的静态。