我不能将对象属性作为函数

时间:2013-03-24 19:15:20

标签: javascript object properties nested

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

    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”)也是真的吗? 我不能在这看到我的错误。我很遗憾......有什么想法吗?

2 个答案:

答案 0 :(得分: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"));  
}

答案 1 :(得分:0)

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

for ... in循环中的javascript迭代对象的属性名称,而不是属性本身。因此a将返回每个属性的名称,这些属性将永远是字符串

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

如果要迭代对象的属性,可以执行此操作

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