Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按原型定义函数和按类属性定义函数有什么区别?_Javascript_Prototype - Fatal编程技术网

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

Javascript 按原型定义函数和按类属性定义函数有什么区别?,javascript,prototype,Javascript,Prototype,遵循我的代码, 苹果通过原型定义功能。 香蕉是按类属性定义函数的 var Apple = function(){} Apple.prototype.say = function(){ console.debug('HelloWorld'); } var Banana = function(){ this.say = function(){ console.debug('HelloWorld'); } } var a = new Apple(); var

遵循我的代码,
苹果通过原型定义功能。
香蕉是按类属性定义函数的

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();

这些是不同的吗?

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

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


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

原型成员与类成员类似原型成员与类成员类似,而当您以其他方式定义它时,它不是类成员。所以,如果你正在创建苹果的很多对象,那么所有对象都将共享相同的函数,而在香蕉的情况下,每个对象都有自己的函数副本。
将javascript中的原型视为C#中的静态原型。

此外,所有实例都可以“看到”对原型的更改,这在某些情况下可能很有用。是的,从这个意义上讲,它相当于静态原型。我还想知道继承,所以我做了一个小动作。结果:它是双向的。