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

时间:2011-11-22 13:08:24

标签: javascript prototype-programming prototype-chain

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

的问题

然后有人为John Resig的类继承提供了一个链接 - a clever script

然后我尝试使用这个脚本。

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

我使用博客中的示例:

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

用萤火虫我发现了这个: enter image description here

所以我想知道一个对象的原型链的深度会影响性能吗?

似乎有一个无尽的循环。

2 个答案:

答案 0 :(得分:3)

构造函数的原型是相同的构造函数。所以是的,你正在寻找一个无限循环。

然而,在解析对象的成员时,浏览器不遵循构造函数链,它有一个实际使用的内部指针(有时称为__PROTO__,但不指望它)。 JavaScript引擎也可能选择编译为机器代码,这些代码可以提前解析可能的成员,因此在实际执行期间根本不存在任何链。

我强烈怀疑你会遇到任何减速。

答案 1 :(得分:0)

它确实会影响性能,因为它需要遵循原型链来获取属性的值。

这可能会成为您申请的瓶颈吗?我非常怀疑。