Javascript 对象的原型链深度是否会影响性能?
几天前,我在这里发布了一个关于 然后有人提供了一个链接——用于John Resig的类继承 然后我尝试使用这个脚本 但我发现这个脚本创建的对象将有一个非常深的原型链 我在博客中举了一个例子:Javascript 对象的原型链深度是否会影响性能?,javascript,prototype-programming,prototype-chain,Javascript,Prototype Programming,Prototype Chain,几天前,我在这里发布了一个关于 然后有人提供了一个链接——用于John Resig的类继承 然后我尝试使用这个脚本 但我发现这个脚本创建的对象将有一个非常深的原型链 我在博客中举了一个例子: var Person = Class.extend({ init: function(isDancing){ this.dancing = isDancing; }, dance: function(){ return this.dancing; } }); var Nin
var Person = Class.extend({
init: function(isDancing){
this.dancing = isDancing;
},
dance: function(){
return this.dancing;
}
});
var Ninja = Person.extend({
init: function(){
this._super( false );
},
dance: function(){
// Call the inherited version of dance()
return this._super();
},
swingSword: function(){
return true;
}
});
var n=new Ninja(true);
console.dir(n);
在firebug中,我发现:
所以我想知道对象的原型链的深度会影响性能吗
这似乎是一个无止境的循环。它确实会影响性能,因为它需要遵循原型链才能获得属性的价值
这是否可能成为应用程序的瓶颈?我对此深表怀疑。构造函数的原型是同一个构造函数。是的,你看到的是一个无止境的循环 然而,浏览器在解析对象的成员时不遵循构造函数链,它有一个实际使用的内部指针(有时称为
\uuuu PROTO\uuu
,但不依赖它)。JavaScript引擎还可以选择编译为机器代码,机器代码预先解析可能的成员,因此在实际执行期间根本不存在链
我强烈怀疑您是否会遇到任何减速。@hguser出于某种原因,我不得不澄清,罗素关于潜在瓶颈的问题纯粹是修辞性的。