watch.js is going nuts

watch.js is going nuts

本文关键字:nuts going is js watch      更新时间:2023-09-26

使用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';

我得到这个错误循环一遍又一遍:

未捕获类型错误:无法读取未定义watch.js:345的属性"undefined"

错误显示来自这里-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

为什么会发生这种情况?

更新

即使我什么都不看,只把脚本添加到头上,它仍然会出现同样的错误。

固定

在循环函数中包装这个中的所有内容

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]);
    }
    }
};