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