我正在开发一个JS插件。所有必需参数都包含在n个对象中。由于有许多方法,用户将错过设置所需的参数。在这种情况下,我构建了一个包含所有参数的基本选项对象。当用户的选项传递到插件功能时,应将缺少的属性设置为内部基本选项 例如,
var option = {
getProp:function(){alert('user prop');} // only one method. No getMsg()
};
//Inside the plugin, two methods
var pluginBaseOption= {
getProp:function(){alert('plugin prop');}
,getMsg : function(){alert('plugin another method');}
};
pluginBaseOption的功能应该被选项覆盖,但是应该保留错过的功能。这意味着,最终的选项对象应该是:
var finalOption= {
getProp:function(){alert('user prop');} // user passed method instead of plugin method
,getMsg : function(){alert('plugin another method');}
};
我尝试使用以下方式,
function overide( initObj, baseOption) {
initObj.prototype = baseOption;
initObj.prototype.constructor = initObj;
return initObj;
}
但是返回的对象没有任何被覆盖的方法,因为它说“未定义”'
答案 0 :(得分:1)
您可以使用这样的简单扩展函数:
function extend(base, obj) {
for (var i in obj) {
base[i] = obj[i];
}
return base;
}
然后您可以像extend(pluginBaseOption, option)
一样使用它。
但是,这只会工作一次,因为pluginBaseOption
本身会被延长。要解决这个问题,我们需要在扩展之前克隆它。好事extend
本身能够克隆:
extend(extend({}, pluginBaseOption), option)