2013-09-29 84 views
1

在Node.js的究竟是爲了當遍歷所有對象的屬性,它遍歷之前它自己的屬性或其他方式輪繼承的屬性?Node.js的物業遍歷順序

也是這個可能在未來又名做我需要寫一些功能檢測此類似,下面來改變?

var util = require("util"); 

function testOwnFirst() { 
    function A() { 
     this.a = 1; 
    } 

    function B() { 
     this.b = 2; 
    } 
    util.inherits(B, A); 

    var objB = new B(); 
    for (var prop in objB) { 
     if(prop === "a") { 
      // Traversal starts with inherited properties first 
      return false;  
     } 
      // Traversal starts with own properties first 
     return true; 
    } 
} 

exports.ownFirst = testOwnFirst(); 
+2

ECMAScript標準很明確指出的對象是一個_unordered_集合屬性(參見4.3.3節在這裏:http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf),所以你應該不以任何方式依賴於屬性的排序。節點(和底層的V8引擎)將不提供任何保證。 – ksimons

+0

你也許可以做到這一點遍歷所有屬性和調用hasOwnProperty(),每一個看到這是繼承的,哪些不是 – ksimons

+0

@ksimons我明白了,謝謝,我一直在尋找在jQuery的執行isPlainObject作爲我最好的我喜歡有同樣的事情。但如果規範說**無序**我只是檢查循環中的hasOwnProperty。 – DeMeNteD

回答

1

ECMAScript標準相當明確指出,其目的在於特性(參見4.3.3這裏:ecma-international.org/publications/files/ECMA-ST-ARCH/...)的無序集合,所以你不應以任何方式依賴於屬性的排序。節點(和底層的V8引擎)將不提供任何保證。

你也許可以做到這一點遍歷所有屬性和調用hasOwnProperty(),每一個看到這是遺傳的,哪些不是最好的