Javascript 我无法获取对象属性作为函数

Javascript 我无法获取对象属性作为函数,javascript,object,properties,nested,Javascript,Object,Properties,Nested,光环男孩。。我是这个网站的新手,所以任何帮助都将不胜感激。请让我知道我的问题是否已经存在于另一个主题中。我有以下问题。。我创建了一个有另一个对象的对象。子对象具有一些属性。每当我迭代子对象以获取属性时,似乎所有属性都是字符串类型。。以下是我的代码: var obj = {} obj.x = function(){ this.y = function(){ } } for(var a in obj){ alert(

光环男孩。。我是这个网站的新手,所以任何帮助都将不胜感激。请让我知道我的问题是否已经存在于另一个主题中。我有以下问题。。我创建了一个有另一个对象的对象。子对象具有一些属性。每当我迭代子对象以获取属性时,似乎所有属性都是字符串类型。。以下是我的代码:

    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来测试这个。typeofa==函数是真的,而a.hasOwnPropertyy也是真的,不是吗? 我在这里看不出我的错误。我完全迷路了。。有什么想法吗?

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"));  
}
javascript中的For…in循环迭代对象的属性名称,而不是属性本身。因此,a将返回每个属性的名称,这些名称始终是字符串

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

如果要迭代对象的属性,可以这样做

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

谢谢你的答复D我刚刚编辑了我的问题。。typeofa==函数是否为真,a.hasOwnPropertyy是否也为真?a是propertyor键,因此只能是字符串或数字。是的。。我发现了我的错误。非常感谢
for(var a in obj){
    var property = obj[a];
        alert(typeof( property) === "string"); //this will be false
}