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());
如何消除looper以获得密钥
["name", "age", "looper", looper: function]
需要输出
["name", "age"]
答案 0 :(得分:3)
您可以使用Object.keys方法。这只会给你可枚举的键,所以你不会得到looper键。
// Enumerable keys as an array
Object.keys( objectName );
Object.keys方法包含在最新的浏览器中,如果不存在,您可以将其添加到旧浏览器中,如链接文章中所述。
答案 1 :(得分:2)
有两种解决方案。您可以使用Object.keys
来执行与looper
函数相同的操作:
var test = {name: "tab", age: 5};
console.log(Object.keys(test));
第二种方法是向hasOwnProperty
添加额外的looper
支票:
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());
就这么简单。观看演示:
答案 2 :(得分:1)
hasOwnProperty可以解决问题:
for (var property in this) {
if (this.hasOwnProperty(property)) {
result.push(property);
}
}
for..in
迭代原型链中的所有属性,因此建议在迭代对象的属性时始终使用hasOwnProperty()
检查,尤其是在使用某些库时。这也是一个原因,为什么for..in
不适合迭代数组。