在javascript中有两种创建对象的方式:
- 在“构造函数”上使用 new
- 返回字典 {} 并设置正确的键/值对
首先是例如
FooType = function() {
this.hello = function() { alert("hello"); };
};
foo = new FooType();
foo.hello();
第二个是
fooFactory = function() {
return {
hello : function() { alert("hello"); }
};
};
foo = fooFactory();
foo.hello();
(为帖子编写的代码。不保证正确)
除了将 this 绑定(bind)到全局对象的错误风险之外,这两种方法是否完全等效(还考虑了原型(prototype)继承等...)?
最佳答案
它们并不等价,尤其是在考虑原型(prototype)继承时。
FooType = function() {
this.hello = function() { alert("hello"); };
};
var foo = new FooType();
FooType.prototype.bye = function() { alert('bye!'); };
foo.bye(); // "bye!"
以 fooFactory 方式实现该目标的唯一方法是将其添加到 object
原型(prototype),这是一个非常糟糕的主意。
在我看来,第一种方法更有意义(因为对象具有可以检查的类型)并且如果原型(prototype)正确完成,可以提供更好的性能。在您的第一个示例中,每次实例化一个新的 FooType
对象时,它都会创建一个新的“hello”函数。如果您有很多这样的对象,就会浪费大量内存。
考虑改用这个:
function FooType() { }
FooType.prototype.hello = function() {
alert('Hello');
};
关于javascript - 在 javascript 中使用 new 与 {} 创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1997424/