javascript - 有什么理由在 JavaScript 中使用 Object.create() 或 new 吗?

标签 javascript ecmascript-5 object-create

到目前为止,我一直在 JavaScript 中使用 new 关键字。我一直在阅读有关 Object.create 的内容,我想知道我是否应该改用它。我不太明白的是我经常需要运行构造代码,所以我根本看不到 Object.create 将如何工作,因为它不会触发任何函数运行。

谁能告诉我,在什么情况下我应该使用 Object.create 而不是 new

最佳答案

到目前为止,如果要创建一个对象,只能使用字面量:

var obj = {};

Object 构造函数。

var obj = Object();

但是这些方法都不允许您指定所创建对象的原型(prototype)

这就是您现在可以使用 Object.create 做的事情。它允许您创建一个新对象并将第一个参数设置为新对象的原型(prototype)。此外,它还允许您设置作为第二个参数提供的新对象的属性。

这类似于做这样的事情(没有第二个参数):

function create(proto) {
    var Constr = function(){};
    Constr.prototype = proto;
    return new Constr();
}

因此,如果您使用的是与此类似的构造,则当您想要使用 Object.create 时。

它不是 new 的替代品。它更多的是使创建应该从另一个对象继承的单个对象更简单。

例子:

我有一个对象a:

var a = {
   someFunction: function() {}
};

并且我希望b 扩展这个对象。然后你可以使用Object.create:

b = Object.create(a);
b.someOtherFunction = function(){};

每当你有一个构造函数,但你只从它实例化一个一个对象时,你可以用Object.create替换它。

有适用的一般规则。这在很大程度上取决于构造函数在做什么以及您如何从其他对象继承等等。

关于javascript - 有什么理由在 JavaScript 中使用 Object.create() 或 new 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6613261/

相关文章:

javascript - 如何在它们之间的 setTimeout 之后调用数组中的多个函数?

javascript - 无法从绑定(bind)函数访问对象变量,或从未绑定(bind)函数访问内部方法

javascript - 具有多个属性的 Object.create() 的简写

javascript - 在通过 Object.create 创建的对象上设置原型(prototype)

javascript - Object.create 与直接原型(prototype)继承

javascript - Node/statSync 问题

javascript - 在jsp中刷新页面后检索先前填充的值和选择

javascript - Electron ipc通讯

javascript - 组合 float 和绝对位置

javascript - 使用 Object.Create 将函数添加到 JavaScript 对象