0

你好我知道这个问题已经被问过很多次了,但是意见和争论太多了。我没有最丰富的经验来验证答案,所以在这里我会解释我在寻找什么,也许你可以指出我正确的方向。

在我的应用程序中,我创建了一个包含一些方法的对象,其中大多数都有一组预定义的默认值,如下所示:

module.exports = {

    submit: function(options) {

        var defaults = {
            _id: 1453,
            text: 'Some text',
            dataObj:{
                links: 3532,
                arr: ['James','Paul','Lina'],
            },
            dims:{
                width: getClientWidth(),
                height: getClientHeight()
            }
        }

        options.extend(defaults);

        return sendData(defaults);

    }

    // other similar methods - functions

};

我感兴趣的是扩展默认局部变量的属性和属性。如您所见,默认值是一个复杂的结构化对象。请记住,期权结构可能更加复杂。因此,如果我没记错的话,简单的浅合并/复制在这里可能并不理想。

你可以想象的用法:

var app = {
   // stuff
}

app.fn = require('common/lib.js');

app.initialize(function(){
   var settings = {
      // hell here
   }
   app.fn.submit(settings)
})

先感谢您。

PS。没有使用任何库,我对以任何方式实现 extend() 函数的纯 javascript 实现感兴趣。

4

1 回答 1

0

这里提出了类似的问题: nodeJS 的 deep extend (like jQuery's)

只需将扩展功能从接受的答案复制到您的项目中,以便它在正确的范围内可用。然后像这样使用它: options = extend(true, defaults, options);

您的设置对象可能如下所示,并将正确合并到默认值之上:

var settings = {
  text: "Other text",
  dataObj:{
    links: 3531
  }
};
于 2013-09-24T08:39:13.793 回答