Javascript setPrototypeOf对新对象的性能有什么影响?
MDN提示使用Javascript setPrototypeOf对新对象的性能有什么影响?,javascript,ecmascript-6,Javascript,Ecmascript 6,MDN提示使用.setPrototypeOf()将对代码的未来性能产生不良影响 我还阅读了一些关于为什么更改对象的[[Prototype]]会降低性能的问题。但没有一个答案能真正解释背景中发生了什么。所以我想知道这是否也适用于新对象 我特别喜欢这样做: var MyPrototype = { method1 : function(){...}, method2 : function(){...}, ... }; var newObject = Object.setPro
.setPrototypeOf()
将对代码的未来性能产生不良影响
我还阅读了一些关于为什么更改对象的[[Prototype]]会降低性能的问题。但没有一个答案能真正解释背景中发生了什么。所以我想知道这是否也适用于新对象
我特别喜欢这样做:
var MyPrototype = {
method1 : function(){...},
method2 : function(){...},
...
};
var newObject = Object.setPrototypeOf({
property : 1,
property2 : 'text'
}, MyPrototype);
不幸的是,您不能对对象执行此操作。创建,因为它不接受普通对象文本
我使用的setPrototypeOf
是否也会降低正在执行的JS引擎的性能?如果您担心(显然您应该……)使用Object.setPrototypeOf()
会对性能造成影响,但希望保持对象创建语法与代码的结构类似,请尝试以下方法:
var MyPrototype = {
method1 : function(){...},
method2 : function(){...},
...
};
var newObject = Object.assign(Object.create(MyPrototype), {
property : 1,
property2 : 'text'
});
另一种选择是将对象文字与myPrototype
的浅拷贝合并,尽管这可能不是您想要的
var MyPrototype = {
method1 : function(){},
method2 : function(){}
};
var newObject = Object.assign({
property : 1,
property2 : 'text'
}, MyPrototype);
var newObject=Object.create(MyPrototype,{“property1”:{value:1},“property2”:{value:'text'});我知道,但我认为大多数情况下对象.create()
属性对象太重。我宁愿只写通常的对象文字。如果没有使用value
属性的附加子对象,您可以避免很多复杂性。您熟悉吗?我完全同意,Object.create()在添加道具时太混乱了,特别是当您为每个道具定义可写、可枚举等时。我真的很想使用Object.create(),但现在决定将函数构造函数模式与new
一起使用,这要简单得多。标记的答案并不能真正回答问题,只是在setPrototypeOf()
确实(或将)对性能产生巨大负面影响的情况下提供了一个解决方案。但没有任何迹象表明它确实会对性能产生负面影响。FirefoxJavaScript控制台也给出了同样的警告。为什么?哦,我明白了。嗯,好像我错过了这个。看起来有点傻,因为我们首先创建了两个新对象,一个具有所需属性但原型错误,另一个没有任何属性但原型正确。然后将所有属性从一个对象复制到另一个对象。但由于这将避免未来的性能问题,我想这是一个好办法。谢谢创建一个具有正确原型的对象,以及另一个要从中复制特性的对象。只有第二个值是“浪费的”,但这就是通常将多个“命名”值传递给函数的方式<代码>对象。创建
使用相同的机制是的,我知道。我的意思是,我们想要创建一个具有特定原型的新对象,但为了实现这一点,我们实际上需要创建两个。我也将此方法用于方法参数,但在这里,我们只想使用正确的原型快速设置一个新对象。但是这是更好的方法,所以没有抱怨^ ^如果你使用的是巴别塔,你也可以考虑使用<代码>