Javascript 使用原型优于在构造函数中创建函数?
这是一个动物对象的构造函数Javascript 使用原型优于在构造函数中创建函数?,javascript,Javascript,这是一个动物对象的构造函数 function Animal(name, sound) { this.name = name; this.sound = sound; this.makeSound = function() { alert(sound); } } 我发现开发人员可以通过 Animal.prototype.makeSound = function() { alert(this.sound); }; 并从构造函数中排除makeSound方法。使
function Animal(name, sound) {
this.name = name;
this.sound = sound;
this.makeSound = function() {
alert(sound);
}
}
我发现开发人员可以通过
Animal.prototype.makeSound = function() { alert(this.sound); };
并从构造函数中排除makeSound方法。使用此原型设计模式的优点是什么?原型版本只应创建一次并存储在内存中,而构造函数版本将在内存中创建新函数并与对象一起存储
这更像是一种内存管理。在功能上,它几乎是一样的 对象实例的原型“存在”。当您创建其中一个对象时,该数据将被优化为已经存在,而不是在每次实例时更改该对象。。。还有Tejs刚才说的。此外,您可以公开访问原始方法(
Animal.prototype.makeSound
),该方法可能很有用。在这两种情况下,每个新对象有多少个函数对象?我认为这两种情况下都有很多对象。只有function()
创建了一个新的函数对象。无论哪种情况,都会为以下对象创建许多函数对象:animals=[];对于(i=0;i<1000;i++){animals.push(new Animal())}
同样,修改原型
会影响其中包含其[[prototype]]
链的所有对象。哦,谢谢你,所以从构造函数实例化的所有对象默认情况下都通过\uuuuuuproto\uuu
属性引用相同的原型对象,constructor.prototype
属性。\uuuu proto\uuuu
属性是一些浏览器(如FF?)中公开的实现细节;如果这是标准,那就好了,但事实并非如此。使用的[[prototype]]
被视为构造函数的对象。prototype
属性在新建构造函数时计算为(从技术上讲,可以在新建调用之间更改prototype
属性,但我不能说我看到这样做了…)