簡體   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