2013-03-24 56 views
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)===“函数”是真的,并且a.hasOwnProperty(“y”)也是正确的? 我在这里看不到我的错误。我很迷茫..有什么想法?

回答

0

obj.x是一个功能,如果你想使用的功能作为一个对象的构造尝试

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

    } 
})(); 

也是你的测试是错误的,a只是一个字符串,以便ofcourse它不会有一个y属性。

for(var a in obj){ 
    alert(typeof(obj[a]) === "object"); 
    alert(obj[a].hasOwnProperty("y")); 
} 
+0

感谢您的回复。 :D ..我刚刚编辑我的问题..不应该是typeof(a)===“功能”是真实的,而且a.hasOwnProperty(“y”)也是如此? – 2013-03-24 19:26:44

+0

'a'是一个属性(或键),所以它只能是一个字符串或一个数字。 – Musa 2013-03-24 19:29:28

+0

这工作辉煌!谢啦!上帝保佑! :D – 2013-03-24 19:33:09

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

对于...在循环在JavaScript遍历一个对象,而不是属性本身的属性名称。所以a将返回每个属性的名称,这将永远是字符串

在您的例子OBJ有一个属性x,所以循环将a等于"x"

如果你想遍历性运行一次的对象,你可以这样做

for(var a in obj){ 
    var property = obj[a]; 
     alert(typeof(property) === "string"); //this will be false 
} 
+0

是的..我发现我的错误。非常感谢! :) – 2013-03-24 19:34:33