Javascript覆盖对象方法

时间:2015-01-27 08:48:56

标签: javascript

我正在开发一个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;
}  

但是返回的对象没有任何被覆盖的方法,因为它说“未定义”'

1 个答案:

答案 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)