使用watch.js的浏览器端版本。
在html头中:
<script type="text/javascript" src="S/watch.js"></script>
在javascript中:
var here={'now':'somewhere'}
watch(here,['now'],function(){
console.log('home changed: '+here.now);
});
here.now='somewhere else';
我一遍又一遍地循环这个错误:
未捕获的TypeError:无法读取未定义的属性“未定义” watch.js:345
错误显示来自此处 - watch.js代码:
var loop = function(){
for(var i in lengthsubjects){
var subj = lengthsubjects[i];
var difference = getObjDiff(subj.obj[subj.prop], subj.actual); <-watch.js:345
为什么会这样?
的更新 的
即使我什么都没看,只是将脚本添加到头部,它仍会无限地发生同样的错误
答案 0 :(得分:0)
的 FIXED!强> 的
在循环函数中包装此
中的所有内容if(lengthsubjects.length!==0){}
因为如果你做console.dir(lengthsubjects);
你得到:
length: 0,
__proto__: Array[0]
这是watch.js从340-360行的变化:
var loop = function(){
if(lengthsubjects.length!==0){
for(var i in lengthsubjects){
//
var subj = lengthsubjects[i];
var difference = getObjDiff(subj.obj[subj.prop], subj.actual);
if(difference.added.length || difference.removed.length){
if(difference.added.length){
for(var j in subj.obj.watchers[subj.prop]){
watchMany(subj.obj[subj.prop], difference.added, subj.obj.watchers[subj.prop][j], subj.level - 1, true);
}
}
callWatchers(subj.obj, subj.prop, "differentattr", difference, subj.actual);
}
subj.actual = clone(subj.obj[subj.prop]);
}
}
};