1

晕伙计们..我在这个网站上很新,所以任何帮助将不胜感激。如果我的问题已经存在于另一个主题中,请告诉我。我有以下问题..我创建了一个具有另一个对象的对象。子对象有一些属性。每当我迭代子对象以获取属性时,似乎所有属性都是字符串类型的。下面是我的代码:

    var obj = {}
    obj.x = function(){
        this.y = function(){

        }
    }

    for(var a in obj){
        alert(typeof(a) === "string"); //this will be true
        alert(a.hasOwnProperty("y")); //this will be false
    }

我使用 chrome 来测试这个。不应该是 typeof(a) === "function" 是真的并且 a.hasOwnProperty("y") 也是真的吗?我在这里看不到我的错误。我很迷茫..有什么想法吗?

4

2 回答 2

0

obj.x是一个函数,如果你想将该函数用作对象的构造函数,请尝试

obj.x = new (function(){
    this.y = function(){

    }
})(); 

你的测试也是错误的,a只是一个字符串,所以它当然没有y属性。

for(var a in obj){
    alert(typeof(obj[a]) === "object");  
    alert(obj[a].hasOwnProperty("y"));  
}
于 2013-03-24T19:20:58.327 回答
0
for(var a in obj){
        alert(typeof(a) === "string"); //this will be true
}

javascript 中的 for...in 循环遍历对象的属性名称,而不是属性本身。所以a将返回每个属性的名称,这些属性始终是字符串

在您的示例中, obj 具有一个属性x,因此循环将运行一次,a等于"x"

如果要遍历对象的属性,可以这样做

for(var a in obj){
    var property = obj[a];
        alert(typeof( property) === "string"); //this will be false
}
于 2013-03-24T19:28:24.313 回答