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);就是正確的調用,結果就對了。