javascript - 在 javascript 中使用 new 与 {} 创建对象

标签 javascript

在javascript中有两种创建对象的方式:

  1. 在“构造函数”上使用 new
  2. 返回字典 {} 并设置正确的键/值对

首先是例如

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/

相关文章:

javascript - 从 Electron 中的模块调用 main.js 中的对象

javascript - 在 props 中调用回调函数

Javascript,计算有多少文件附加到文件上传输入

javascript - 销毁之前的setInterval

javascript - 加载微调器不适用于 Angularjs 中的 ng-click 或 ng-change

javascript - 将输入选择更改为 radio

javascript - 在 react 中映射数据时隔离函数

javascript - 在javascript的帮助下打开div

javascript - 如何调用json API特定键

javascript - 移动文档中的元素会导致滚动重置