我正在开发一个ExtJS Web应用程序,想要列出对象的所有属性名称。通过搜索,我很快在这个博客上找到了一些参考代码。现在,在使用这个keys()方法时,当枚举对象中的对象的属性名称时,我发现一些奇怪的行为。示例代码:
keys = function(obj) {
if (typeof obj != "object" && typeof obj != "function" || obj == null) {
throw TypeError("Object.keys called on non-object");
}
var keys = [];
for (var p in obj)
obj.hasOwnProperty(p) && keys.push(p);
return keys;
};
var test = {}
test["nr1"] = {testid: 1, teststr: "one"};
test["nr2"] = {testid: 2, teststr: "two"};
test["nr3"] = {testid: 3, teststr: "three"};
for (var i in keys(test)) {
console.log(i);
}
运行此代码时,控制台输出:
0
1
2
remove()
所以,在期望的3个属性名称之上,它还列出了一个“remove()”函数。这显然与ExtJS有关,因为在空白的、非ExtJS加载页面上,枚举按预期工作。
有人能解释一下ExtJS在这里到底做了什么吗?是否有更好的方法来枚举对象自有属性名称?
非常感谢, wwwald