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);就是正确的调用,结果就对了。