【问题标题】:What is difference between define function by prototype and class property?通过原型和类属性定义函数有什么区别?
【发布时间】:2011-08-20 05:29:03
【问题描述】:

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

这些有区别吗?

【问题讨论】:

    标签: javascript prototype


    【解决方案1】:

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

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

    此外,如果您更改父对象的属性,如果子对象不替换该属性,则更改对子对象可见。

    【讨论】:

    • 此外,对原型的更改会被所有实例“看到”,这在某些情况下可能很有用。
    • 是的,它在某种意义上相当于静态。
    • 我也想知道继承,所以我做了一个小提琴。结果:它是双向的。 jsfiddle.net/jdhenckel/tfn71a96
    【解决方案2】:

    原型成员就像类成员原型成员就像类成员,而当你以其他方式定义它时它不是类成员。因此,如果您要创建大量 Apple 对象,所有对象都将共享相同的功能,而对于香蕉,每个对象都将拥有自己的功能副本。 将 javascript 中的原型视为 C# 中的静态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-29
      • 1970-01-01
      • 2018-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      • 2021-12-26
      相关资源
      最近更新 更多