MDN暗示使用.setPrototypeOf()
会对代码的未来性能产生不良影响。
我还读了一些关于为什么改变对象的[[Prototype]]会降低性能的问题。但是没有一个答案真正解释了在后台发生的事情。所以我想知道这是否也适用于新的对象。
特别是我真的喜欢做这样的事情:
var MyPrototype = {
method1 : function(){...},
method2 : function(){...},
...
};
var newObject = Object.setPrototypeOf({
property : 1,
property2 : 'text'
}, MyPrototype);
很遗憾,您无法使用Object.create
执行此操作,因为它不接受普通对象文字。
我对setPrototypeOf
的使用是否也降低了执行JS引擎的性能?
答案 0 :(得分:5)
如果您担心(显然应该......)使用Object.setPrototypeOf()
对性能产生影响,但希望保持对象创建语法与代码的结构类似,请尝试以下方法:
var MyPrototype = {
method1 : function(){...},
method2 : function(){...},
...
};
var newObject = Object.assign(Object.create(MyPrototype), {
property : 1,
property2 : 'text'
});
答案 1 :(得分:0)
另一种选择是将对象文字与myPrototype
的浅层副本合并,尽管这可能不是您的愿望。
var MyPrototype = {
method1 : function(){},
method2 : function(){}
};
var newObject = Object.assign({
property : 1,
property2 : 'text'
}, MyPrototype);