在javascript中覆盖克隆功能

时间:2015-05-13 17:12:59

标签: javascript clone

我正在使用https://stackoverflow.com/a/1833851克隆一个函数,以便我可以覆盖它。例如:

Function.prototype.clone = function() {
    var that = this;
    var temp = function temporary() { return that.apply(this, arguments); };
    for(var key in this) {
        if (this.hasOwnProperty(key)) {
            temp[key] = this[key];
        }
    }
    return temp;
};

window.capture_list = [];
window.handler_clone = window.YAHOO.handleData.clone();

window.YAHOO.handleData = function(oRequest, oResponse, oData){
    window.capture_list.push( {'oRequest': oRequest, 'oResponse': oResponse, 'oData': oData} );
    return window.handler_clone( oRequest, oResponse, oData );
};

这似乎可以完成任务,但我在实践中得到了“Maximum call stack size exceeded error”。

似乎我正在使用的克隆方法以某种方式递归到自身......我认为由于我有限的js经验,我对这个克隆实现有些误解。

有关此递归位置的任何想法,或者如何更好地实现克隆以覆盖?我真的只是试图拦截传递给handler()的参数。谢谢!

handleData函数:

window.YAHOO.handleData = function(oRequest, oResponse, oData) {
    if (oData == null) {
        oData = {}
    }
    oData.totalRecords = oResponse.meta.totalRecords;
    return oData
};

1 个答案:

答案 0 :(得分:0)

逐步完成:

克隆副本this然后将任何参数应用于原始函数,然后迭代函数中的键(我假设获取原型属性?),然后将其返回。

好像你正在尝试创建装饰器?

在任何情况下,我都不确定为什么你没有选择使用bind它会在传入的上下文中创建一个新函数。

更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind