0

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のプロパティ '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

なぜこれが起こるのですか?

アップデート

何も見ずにスクリプトを頭に追加するだけでも、同じエラーが無限に発生します

4

1 に答える 1

0

修繕!

ループ関数では、これですべてをラップします

if(lengthsubjects.length!==0){}

console.dir(lengthsubjects); を実行すると、

あなたが得る:

length: 0,
__proto__: Array[0]

これは、340 ~ 360 行目からの watch.js の変更です。

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

    }

    }
};
于 2013-09-02T14:46:39.323 に答える