![](/img/trans.png)
[英]“for var in” accessing JS object returns everything *but* own properties?
[英]For var in object returns methods together with properties
我尝试了以下代码,但惊讶地发现,对于var in对象返回而言,对象方法也是如此。 我不确定为什么会发生,对象方法本质上是属性吗? 有什么方法可以使其仅返回包含值的属性?
var object = {p1: 1, p2: 2, p3: 3};
object.funkcja = function() {
for (var x in object) {document.getElementById("test").innerHTML += object[x] + "<BR>";}
};
例:
检查像波纹管应该工作。
for (var x in object) {
if(object.hasOwnProperty(x)){
document.getElementById("test").innerHTML += object[x] + "<BR>";
}
}
这是因为JavaScript在值和方法之间没有区别。 您必须自己从值中过滤方法。 我建议您在循环中使用以下功能: 如何检查javascript变量是否为功能类型?
for (var p in object){
if(isFunctionA(p) == false){
//Make your work on props here.
}
}
function isFunctionA(object) {
return object && getClass.call(object) == '[object Function]';
}
是的,对象的方法仅仅是碰巧是函数的属性。 您可以使用以下命令测试属性是否为函数
if(typeof object[x] === 'function')
要么
if(object[x] instanceof Function)
我相信instanceof运算符的效率稍高一些,但是如果您有多个全局上下文有效(例如,如果在不同框架之间传递对象),则它可能无法工作。
还值得注意的是,for in循环将返回在对象原型上定义的属性及其实例属性。 为了避免这种情况,您可以使用
if(object.hasOwnProperty(x))
我认为这是正确的方法:
for (var x in object) {
if(object.hasOwnProperty(x) && !(object[x] instanceof Function) ){
document.getElementById("test").innerHTML += object[x] + "<BR>";
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.