我已经tried更好地理解为什么要从Object(var o = Object.create(null);
)继承一个(或不应该)。如果我的答案是正确的,性能的原因似乎是从null继承的主要可行理由。从空对象的“Interiting”似乎没有影响性能
所以,我想检查(利用体积小,方便和可爱探查称为JSLitmus):
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Title</title>
<script src="JSLitmus.js"></script>
<script>
JSLitmus.test('Prototypeless test', function() {
var o1 = Object.create(null);
o1.foo = "bar";
for (i = 0; i < 1000000; ++i) {
o1.foo;
};
});
JSLitmus.test('Prototypeful test', function() {
var o2 = {};
o2.foo = "bar";
for (i = 0; i < 1000000; ++i) {
o2.foo;
};
});
</script>
</head>
<body>
</body>
</html>
执行时,我得到了相同的(有争议的)结果。这是否意味着从Object
继承时没有性能损失?
当然你有。因为属性查找不是免费的。然而现代JIT编译器可以将成本降低到接近零,因此它是一种微型优化。 – Raynos
比从零继承没有理由,呵呵。一些冗余的语言功能。并且故事的结尾,我猜:) – BreakPhreak
正确的是_little_点,但是你可以想象人们抱怨说Object.prototype在他们的原型链中是_always_。 – Raynos