2012-07-08 72 views
8

我需要修復Parse.Object庫的save函數中的一個錯誤。但是,當我嘗試在覆蓋的原型中調用原始函數save時,它會遞歸循環直到堆棧溢出!擴展原型函數而不覆蓋它

Parse.Object.prototype.save = function (arg1, arg2, arg3) { 
    fixIncludedParseObjects(this); 

    Parse.Object.prototype.save.call(this, arg1, arg2, arg3); // endless loop 
}; 

如何更改無限循環行來調用parse所生成的原始函數?

謝謝!

+0

我喜歡這個問題,但仍然無法找到適合我的答案,即使是來自@xdazz的答案。 – Ryan 2017-01-29 20:26:31

回答

18

試試這個:

(function(save) { 
    Parse.Object.prototype.save = function (arg1, arg2, arg3) { 
    fixIncludedParseObjects(this); 
    save.call(this, arg1, arg2, arg3); 
    }; 
}(Parse.Object.prototype.save)); 
+3

你能解釋一下這裏發生了什麼嗎?或者是一些鏈接。謝謝 – Adi 2012-07-08 07:48:12

+3

@Adnan您需要將舊的保存方法保存到變量中,這樣,使用函數參數'save'。 – xdazz 2012-07-08 07:52:56

+0

謝謝@xdazz – Adi 2012-07-08 07:53:25

4
Parse.Object.prototype.save = function (save) { 
    return function() { 
     fixIncludedParseObjects(this); 
     //Remember to return and .apply arguments when proxying 
     return save.apply(this, arguments); 
    }; 
}(Parse.Object.prototype.save); 
+1

工作,但給JSHint錯誤「包裝立即功能職業在括號中「https://jslinterrors.com/wrap-an-immediate-function-invocation-in-parentheses – 2015-12-31 03:49:27

0

類似接受的答案,但也許有點更容易理解

var originalSaveFn = Parse.Object.prototype.save; 
Parse.Object.prototype.save = function(arg1, arg2, arg3) { 
    fixIncludedParseObjects(this); 
    originalSaveFn.call(this, arg1, arg2, arg3); 
};