繁体   English   中英

对于对象中的var返回方法以及属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM