扩展 javascript 对象及其属性
Posted
技术标签:
【中文标题】扩展 javascript 对象及其属性【英文标题】:Extending javascript object and it's properties 【发布时间】:2013-09-29 08:42:25 【问题描述】:您好,我知道这个问题已经被问过很多次了,但是意见和争论太多了。我没有最丰富的经验来验证答案,所以在这里我将解释我在寻找什么,也许你可以指出我正确的方向。
在我的应用程序中,我创建了一个包含一些方法的对象,其中大多数都有一组预定义的默认值,如下所示:
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 实现感兴趣。
【问题讨论】:
您是在使用 NodeJS 还是在浏览器中运行它?无论如何尝试:options.extend(true, defaults);
它设置了一个“深拷贝”标志。编辑:至少对于一些它应该的库。不太确定您的扩展功能来自哪里。
我不使用来自我正在开发的 appcelerator 项目的库,我正在寻找一个纯 JavaScript 解决方案
【参考方案1】:
这里提出了类似的问题: deep extend (like jQuery's) for nodeJS
只需将扩展功能从接受的答案复制到您的项目中,以便在正确的范围内可用。然后像这样使用它:
options = extend(true, defaults, options);
您的设置对象可能如下所示,并将正确合并到默认值之上:
var settings =
text: "Other text",
dataObj:
links: 3531
;
【讨论】:
以上是关于扩展 javascript 对象及其属性的主要内容,如果未能解决你的问题,请参考以下文章