Javascript,简单的扩展方法,允许扩展对象的多个版本

标签 javascript extend

我有一个简单的“扩展”方法,设置如下:

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

但这似乎不起作用。

最佳答案

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
*/

关于Javascript,简单的扩展方法,允许扩展对象的多个版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13709372/

相关文章:

php - 扩展核心并在 Laravel 中显示每个页面中的数据

javascript - ExtJS - 复杂表单序列化

javascript/jquery : Need to substring in jquery

javascript - Angular 6 显示或隐藏列表项

javascript - 到特定房间的 Websocket 消息 - Golang Kataras/Iris

haskell - 有没有办法在当前的 haskell 平台上使用 Data.Set 中的 findIndex 方法?

class - Ionic 2/Angular 2 如何将父函数移动到扩展类中

Java:创建 GUI。导入或扩展 JFrame?

javascript - 使用附加功能/覆盖功能扩展 jQuery 插件

javascript - Jquery ajax post 禁用启用字段并获取响应