我试图看看长继承链的性能成本是多少,所以我设置了一个jsperf测试: http://jsperf.com/prototype-inheritance-chain-cost
以下是设置代码:
Person = function (name) {this.name = name}
Person.prototype.title = function () {
return this.name
}
kinds = {"-1": Person};
instances = {"-1": new Person("john")}
for (var i = 0; i < 10; i++) {
kinds[i] = function (name) {this.name = name};
kinds[i].prototype = new kinds[i-1];
kinds[i].prototype[i] = function () {
return this.name
}
instances[i + ''] = new kinds[i]("john")
}
test = function (i) {
instances[i].title();
}
以及两个测试用例:
test("-1")
和
test(5)
然而,第一次测试的时间要长一个数量级。我相当肯定第一次测试应该更快,因为它不必遍历继承链。
答案 0 :(得分:0)
答案非常简单,instance[i]
功能访问test
所需的时间比访问title()
时要长。
为了修复测试,我用两个变量替换了测试函数:
instanceOne = instances["-1"]
instanceFive = instances["5"]
然后两个测试用例很简单:
instanceOne.title()
和
instanceFive.title()
结果如您所料:
没有继承链 - 762,760,656 - 最快 5个父母 - 717,293,580 - 慢6%