首页 > 火狐浏览器中 mutating the [[Prototype]] … 的提示是在什么情况下出现的?

火狐浏览器中 mutating the [[Prototype]] … 的提示是在什么情况下出现的?

mutating the [[Prototype]] of an object will cause your code to run very slowly; instead create the object with the correct initial [[Prototype]] value using Object.create

意译:
中途变更一个对象的原型链,会导致代码接下来运行时变得慢得多;
而应当以正确的初始原型值、用Object.create来创建对象。

但是现在不能锁定到具体代码(存在eval,无法根据提示信息锁定行),不确定是哪种行为算动态更改原型链?
我猜可能是:

a={};
b={};
b.__proto__=a;

那么:

a={};
b={__proto__:a};

算不算呢?
虽然也许能一点一点试验出来,但是找不到从解释器设计角度进行原理分析的文献。
因为通常浏览器js引擎优化是针对变量作用域的,with造成动态作用域会降低速度;另外对象有可能delete导致隐藏类失效、可能因为非常规键导致对象键表成为哈希模式。但原型链不本来就是运行期的事情,难道能在编译期间定死了?另外,这个导致“代码缓慢”的行为的株连范围是多大呢?

其它浏览器没有这种明确的性能提示,代表不存在这个问题(可能都优化了,或都没有优化,或不支持__proto__),或只是没有提示?比如几种主要的内核:
谷歌浏览器
苹果浏览器
ie67891011edge

【热门文章】
【热门文章】