1

私は次のように設定された簡単な「拡張」メソッドを持っています:

extend: function(source) {
    for (var k in source) {
        if (source.hasOwnProperty(k)) {
            myThing[k] = source[k];
        }
    }
    return myThing;
}

あなたはそれを次のように使用します

myThing.extend({ 
    newObj: { 
        myFunc: function () { console.log('things'); }
    }
});

そしてそれは素晴らしい働きをします。
ただし、他のコードでこれを後で呼び出す機能を追加したいと思います。

myThing.extend({ 
        newObj: { 
            mySecondFunc: function () { console.log('things'); }
        }
    });

myThing.newObj.myFunc()ANDの両方を呼び出すことができるはずmyThing.newObj.mySecondFunc()です。

私はそれをこれに変えてみました:

for (var k in source) {
            if (source.hasOwnProperty(k)) {
                if (mtUtils.hasOwnProperty(k)) {
                    for (var t in k) {
                        mtUtils[k][t] = source[k][t];
                    }
                } else {
                    mtUtils[k] = source[k];
                }
            }
        }

しかし、それはうまくいかないようです。

4

2 に答える 2

2
function extend(dest, source) {
    for (var k in source) {
        if (source.hasOwnProperty(k)) {
            var value = source[k];
            if (dest.hasOwnProperty(k) && typeof dest[k] === "object" && typeof value === "object") {
                extend(dest[k], value);
            } else {
                dest[k] = value;
            }
        }
    }
    return dest;
}
var myThing = {};
extend(myThing, {
    newObj: {
        myFunc: function() {
            console.log('things');
        }
    }
});
extend(myThing, {
    newObj: {
        mySecondFunc: function() {
            console.log('things');
        }
    }
});

myThing;
/*
Object
   newObj: Object
      myFunc: function () { console.log('things'); }
      mySecondFunc: function () { console.log('things'); }
      __proto__: Object
   __proto__: Object
*/
于 2012-12-04T18:29:42.400 に答える
1

これで問題は解決するはずですが、再帰バージョンの ? を実装してみませんextendか?

    for (var k in source) {
        if (source.hasOwnProperty(k)) {
            if (mtUtils.hasOwnProperty(k)) {
                for (var t in source[k]) {
                    mtUtils[k][t] = source[k][t];
                }
            } else {
                mtUtils[k] = source[k];
            }
        }
    }
于 2012-12-04T18:28:29.220 に答える