Javascript 对象的原型链深度是否会影响性能?

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

几天前,我在这里发布了一个关于

然后有人提供了一个链接——用于John Resig的类继承

然后我尝试使用这个脚本

但我发现这个脚本创建的对象将有一个非常深的原型链

我在博客中举了一个例子:

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出于某种原因,我不得不澄清,罗素关于潜在瓶颈的问题纯粹是修辞性的。