什么是setPrototypeOf对新对象的性能影响?

时间:2015-09-07 18:54:26

标签: javascript ecmascript-6

MDN暗示使用.setPrototypeOf()会对代码的未来性能产生不良影响。

我还读了一些关于为什么改变对象的[[Prototype]]会降低性能的问题。但是没有一个答案真正解释了在后台发生的事情。所以我想知道这是否也适用于新的对象。

特别是我真的喜欢做这样的事情:

var MyPrototype = {
    method1 : function(){...},
    method2 : function(){...},
    ...
};

var newObject = Object.setPrototypeOf({
    property : 1,
    property2 : 'text'                 
}, MyPrototype);

很遗憾,您无法使用Object.create执行此操作,因为它不接受普通对象文字。

我对setPrototypeOf的使用是否也降低了执行JS引擎的性能?

2 个答案:

答案 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);