几天前,我在这里发布了一个关于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);
用萤火虫我发现了这个:
所以我想知道一个对象的原型链的深度会影响性能吗?
似乎有一个无尽的循环。
答案 0 :(得分:3)
构造函数的原型是相同的构造函数。所以是的,你正在寻找一个无限循环。
然而,在解析对象的成员时,浏览器不遵循构造函数链,它有一个实际使用的内部指针(有时称为__PROTO__
,但不指望它)。 JavaScript引擎也可能选择编译为机器代码,这些代码可以提前解析可能的成员,因此在实际执行期间根本不存在任何链。
我强烈怀疑你会遇到任何减速。
答案 1 :(得分:0)
它确实会影响性能,因为它需要遵循原型链来获取属性的值。
这可能会成为您申请的瓶颈吗?我非常怀疑。