2013-07-22 62 views
1
Object.prototype.looper = function() { 
    var result = []; 
    for (var property in this) 
    result.push(property); 
    return result; 
}; 

var test = {name: "tab", age: 5}; 
console.log(test.looper()); 

如何消除尺蠖得到公正的鑰匙對象有額外的屬性,同時從一個對象中提取鍵

["name", "age", "looper", looper: function] 

輸出所需

["name", "age"] 

回答

2

有兩種解決方案。你既可以使用Object.keys這確實你looper功能做同樣的事情:

var test = {name: "tab", age: 5}; 
console.log(Object.keys(test)); 

第二種方法是增加額外的檢查hasOwnPropertylooper

Object.prototype.looper = function() { 
    var result = []; 
    for (var property in this) 
    if (this.hasOwnProperty(property)) 
     result.push(property); 
    return result; 
}; 

var test = {name: "tab", age: 5}; 
console.log(test.looper()); 

就這麼簡單。查看演示:

  1. http://jsfiddle.net/aaditmshah/bhZbk/
  2. http://jsfiddle.net/aaditmshah/bhZbk/1/
1

hasOwnProperty的伎倆:

for (var property in this) { 
    if (this.hasOwnProperty(property)) { 
     result.push(property); 
    } 
} 

for..in迭代原型鏈中的所有屬性,因此建議在迭代對象的屬性時總是使用hasOwnProperty()檢查,特別是在使用某些庫時。這也是一個原因,爲什麼for..in不適合迭代數組。

3

可以使用Object.keys方法。這隻能給你枚舉鍵,所以你不會得到循環鍵。

// Enumerable keys as an array 
Object.keys(objectName); 

的Object.keys方法包括在最新的瀏覽器,你可以在舊的瀏覽器添加它,如果它不存在,作爲鏈接的文章中提到。

相關問題