我已經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