簡體   English   中英

javascript中嵌套對象的怪異行為

[英]weird behavior of nested object in javascript

我在下面構造了一個嵌套對象:

var outerMost = {

    inner1: {

    innerCall: alert( "i'm the call from inner1" ),

        inner2: {

        innerCall: alert( "i'm the call from inner2" ),

            inner3: {

            innerCall: alert( "i'm the call from inner3" ),

                inner4: {

                innerCall: alert( "i'm the call from inner4" ),

                    inner5: {

                    innerCall: alert( "i'm the call from inner5" ),

                    }
                }
            }
        }
    }
};

我想要的是通過使用此方法來收聽調用表單inner4:

outerMost.inner1.inner2.inner3.inner4.innerCall();

但是我收到了每個內部警報的呼叫,並拋出了一條錯誤消息,指向調試器的最后一個表達式:

Property 'innerCall' of object #<Object> is not a function

我的outsideMost怎么了?

注意:我不會繼續重復整個對象的文字,我將使用縮寫形式...

每次您這樣說:

{ innerCall: alert( "i'm the call from inner1" ) }

你不是創建一個屬性innerCall那是alert()函數,你正在創建一個屬性innerCall已分配的實際調用的結果alert()在那一刻功能。 alert()的返回值是undefined

因此,在創建對象的過程中,五次嵌套該結構的五層深度稱為alert() ,但是實際的innerCall屬性都設置為undefined 所以這:

outerMost.inner1.inner2.inner3.inner4.innerCall();

就像說undefined(); -當然不起作用。

您需要的是innerCall引用一個函數,該函數依次調用alert()

{ innerCall : function() { alert("I'm the call from inner1"); } }

那或多或少等於這樣做:

function myInnerCallFunction1() {
   alert("I'm the call from inner1");
}

{ innerCall : myInnerCallFunction1 }

(請注意,在對象文字myInnerCallFunction1中沒有括號,因此它是對該函數的引用,而不是執行該函數。)

您忘記了指定您的innerCalls對象為函數...下面的正確代碼

var outerMost = {

    inner1: {

    innerCall: function() {alert( "i'm the call from inner1" )},

        inner2: {

        innerCall: function() {alert( "i'm the call from inner2" )},

            inner3: {

            innerCall: function() {alert( "i'm the call from inner3" )},

                inner4: {

                innerCall: function() {alert( "i'm the call from inner4" )},

                    inner5: {

                    innerCall: function() {alert( "i'm the call from inner5" )},

                    }
                }
            }
        }
    }
};

您必須這樣做:

var outerMost = {

inner1: {

    innerCall: function () {
        alert("i'm the call from inner1")
    },

    inner2: {

        innerCall: function () {
            alert("i'm the call from inner2")
        },

        inner3: {

            innerCall: function () {
                alert("i'm the call from inner3")
            },

            inner4: {

                innerCall: function () {
                    alert("i'm the call from inner4")
                },

                inner5: {

                    innerCall: function () {
                        alert("i'm the call from inner1")
                    },

                }
            }
        }
    }
}
};
outerMost.inner1.inner2.inner3.inner4.innerCall();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM