我试图遍历一个对象,并根据其类型在每个不同的子对象上使用不同的功能。instanceof似乎是识别非内置类型的唯一方法,因此我尝试将其与for ... in一起使用;但是,我没有得到预期的输出。
这是一个示例小提琴来说明我的问题:http : //jsfiddle.net/zv230dvL/2/
function testObject(){}
function testContainer(objects){
this.zero = objects[0];
this.one = objects[1];
this.two = objects[2];
}
var singleObject = new testObject();
var container = new testContainer(
[new testObject(),
new testObject(),
new testObject()]
);
...
//Testing if a single object functions as expected
out(singleObject instanceof testObject);
//Testing if directly referencing an object
//in a container functions as expected
out(container.zero instanceof testObject);
//iterating through a container object...
for(i in container){
out(i instanceof testObject);
}
输出是
true
true
false
false
false
首先,做这样的事情的合适方法是什么?
其次,为什么for ... in循环中的变量以这种方式运行?
请不要jQuery。
当您使用迭代Object时for..in
,循环变量将具有字符串类型的键。所以,你应该像这样检查
for (i in container) {
out(container[i] instanceof testObject);
}
现在,您使用的对应键的对象i
在container
。进行此更改后,所有项目的计算结果均为true
。
注意: for..in
应该也提供所有继承的属性。因此,for..in
与对象一起使用时,正常的循环模式是
for (i in container) {
if (container.hasOwnProperty(i)) {
out(container[i] instanceof testObject);
}
}
这样可以确保仅检查直接在对象中定义的属性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句