我一直在和一些在公司里使用JavaScript的专业人士交谈,而且我被告知,new使用全局对象创建一个对象实例并不是一个好习惯{},即使我想要一个空对象,像这样:
var wrong1 = new Object();
var wrong2 = {};
Run Code Online (Sandbox Code Playgroud)
但根据它们和公司的标准,最正确的方法是创建它:
var correct = Object.create({});
Run Code Online (Sandbox Code Playgroud)
将一个空对象传递给一个空对象的原型似乎过度设计,甚至可能没用.
有人可以给我一个答案,为什么这是推荐的,或者如果不是,为什么不呢?(可能的优点和缺点.)
object literal将使用以下原型链创建一个对象.
Object.prototype -> {}
Run Code Online (Sandbox Code Playgroud)
大多数引擎对文字语法进行了大量优化,因为它是如此常见的模式.
要进行比较,请Object.create({})创建一个具有较长原型链的对象.
Object.prototype -> {} -> {}
Run Code Online (Sandbox Code Playgroud)
实例(在最右边)有一个原型{},如前所见已有原型Object.prototype.
Object.create是一个非常有用的功能,用于创建具有自定义原型的对象,它不会遇到与之相同的问题new.但是,我们在这里不需要它,因为{}已经创建了一个具有较短原型链的对象.
我不知道为什么有人会认为添加这个额外的间接层(和性能损失)是一种"最佳实践".
如果有的话,我会说文字语法更安全 - 因为没有办法{}被意外/恶意重新定义,不像Object可以被遮蔽.
var Object = 3;
// ...
Object.create({}) // TypeError: Object.create is not a function(...)
Run Code Online (Sandbox Code Playgroud)
当然,这并不意味着你永远不应该使用Object,但在这种情况下,我认为这{}是最简单的工作工具,因此,它也具有最佳性能.
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |