JS異常處理:Uncaught TypeError: Cannot read property 'LazyLoad' of null

Uncaught TypeError: Cannot read property 'LazyLoad' of null


1、問題描述:

js中定義的對象與對象中的屬性如下:

/**
 * 四個tab對應四個數據加載器
 * searchResult.js
 */

var dataLoaders = [null, commonListLoader, summaryListLoader, imageListLoader, fullviewLoader];

dataLoaders[2]表示的就是summaryListLoader這個對象。

//定義對象中國的屬性load、lazyLoad、lazyLoaded

var summaryListLoader = { //tab2

load : function(records) {

              //省略....

        },

        lazyLoad : function(){

            //省略....

        },

       lazyLoaded : false

}

2、調用報錯

在一個js循環調用中執行下面這句報錯:(本意是想調用 summaryListLoader的lazyLoad(..)函數)

dataLoaders[i].lazyLoad(recordsTmp,picdata);

js報這個錯誤,意思是當前dataLoaders[i]這個對象的屬性lazyLoad屬性沒有取到。首先我確保了dataLoaders對應的對象確實有這個屬性。

分析:一般就是dataLoaders[i]這個值不對,更進一步,就是i取值可能超過範圍了,比如我想取dataLoaders[2]的值,實際上js代碼中循環後,一個細節沒處理好,導致i循環成5了,此時dataLoaders[5]肯定是錯誤的。而dataLoaders[1]--dataLoaders[4]纔是正確的可取值。


3、解決:

1、覈對屬性名稱是否寫對,如果該屬性是函數,覈對函數參數個數是否正確。

2、先調試看調用屬性的這個對象是否正確取到了,比如我代碼裏是這麼取值的,dataLoaders[i].lazyLoad(recordsTmp,picdata);結果說 Cannot read property 'LazyLoad' of null. 所以問題就是dataLoaders[i]的值沒有正確獲取到,通過debugger,發現我實際得到是 dataLoaders[5].lazyLoad(recordsTmp,picdata);,而這個已經超過我定義數組的範圍了。所把i值取對,比如爲2,dataLoaders[5].lazyLoad(recordsTmp,picdata);就是正確的調用,結果就對了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章