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

die*_*and 44 javascript prototype

按照我的代码,
Apple按原型定义功能.
香蕉是通过类属性定义函数.

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();
Run Code Online (Sandbox Code Playgroud)

这些不同吗?

Tim*_*ers 66

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

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

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

  • 是的,它在某种意义上等同于静态. (6认同)
  • 此外,所有实例都"看到"对原型的更改,这在某些情况下可能很有用. (5认同)