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