javascript - 对象.create({}) : Is is a good practice?

标签 javascript

我一直在与公司中使用 JavaScript 的一些专业人士交谈,他们告诉我使用 new 或全局对象 {},即使我想要一个空对象,如下所示:

var wrong1 = new Object();
var wrong2 = {};

按照他们和公司的标准,正确的做法是这样创建:

var correct = Object.create({});

将空对象作为空对象的原型(prototype)进行传递似乎设计过度,甚至可能毫无目的。

有人可以告诉我为什么推荐这样做吗?如果不推荐,为什么不推荐? (可能的利弊。)

最佳答案

对象字面量将创建一个具有以下原型(prototype)链的对象。

Object.prototype -> {}

大多数引擎都对文字语法进行了大量优化,因为它是一种常见的模式。

为了比较,Object.create({}) 创建了一个具有更长原型(prototype)链的对象。

Object.prototype -> {} -> {}

实例(在最右边)有一个 {} 的原型(prototype),如前所述,它已经有一个 Object.prototype 的原型(prototype)。

Object.create 是一个非常有用的函数,可用于使用自定义原型(prototype)创建对象,并且它不会遇到与 new 相同的问题。但是,我们在这里不需要它,因为{}已经创建了一个原型(prototype)链较短的对象。

我不知道为什么有人会认为添加这个额外的间接层(和性能损失)是“最佳实践”。

如果有的话,我会说文字语法更安全——因为 {} 不可能被意外/恶意地重新定义,不像 Object 可以阴影。

var Object = 3;
// ...
Object.create({}) // TypeError: Object.create is not a function(...)

当然,这并不意味着您永远不应该使用 Object,但在这种情况下,我认为 {} 是最简单的工作工具,并且作为结果,它也具有最好的性能。

关于javascript - 对象.create({}) : Is is a good practice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37544955/

相关文章:

javascript - 如何在 Codeigniter 中添加和使用外部 js 文件?

javascript - 使用 Javascript 和 Ajax 的 Rails 开发环境

javascript - 如何找到点击了哪个按钮 : jquery

javascript - 如何在鼠标悬停之前隐藏 highChart plotLine 标签?

javascript - 循环对象数组并获取特定键的最快方法

javascript - Jquery Ajax 不会返回数据(解析错误),但 Postman 成功

javascript - iPhone 支持 getClientRects javascript 方法吗?

javascript - 如何隐藏单个选择的jquery搜索?

javascript - 数据表数字排序问题

javascript - Discord.js 13交互检查交互创建者是否在公会中