Я пытаюсь обезвреживать стороннюю библиотеку javascript, но исходное определение функции я перегружаю, все время вызывается.Переопределение определения функции javascript
var ns = {};
ns.topFxn = function(){
var _me = "me";
function _toOverride(){
console.log("This is the original: " + _me);
}
function pubFxn(){
_toOverride();
}
console.log("Original");
ns.pubFxn = pubFxn;
};
//attempt to monkey patch
var oldTopFxn = ns.topFxn;
ns.topFxn = function(){
oldTopFxn();
function _toOverride(){
console.log("This is the overriden: " + _me);
}
console.log("MonkeyPatch");
};
ns.topFxn();
ns.pubFxn();
ВЫВОД:
scratch.js:15> Original
scratch.js:26> MonkeyPatch
scratch.js:10> This is the original: me
Я думаю, это потому, что эта функция косвенно вызывается другой функцией, и эта функция может провести замыкание на функцию он указывает - значит, может быть, это ISN» возможно? Любые предложения о том, как переопределить?
Вы не можете переопределять определения вложенных функций, а только основную функцию. – Barmar
В этом случае вы должны реализовать всю функциональность 'oldTopFxn' и больше не можете ее вызывать. И если 'oldTopFxn' использует некоторые внутренние функции, вам, возможно, придется реализовать их функциональность, так как вы не можете получить к ним доступ напрямую. Или вы вызываете 'oldTopFxn' и фиксируете результат, насколько это возможно. Можете ли вы назвать/связать конкретную библиотеку и проблему, которую хотите исправить? так что мы могли бы дать вам лучшую рекомендацию, какие у вас варианты – Thomas
Полезно знать. Но почему нет? Если вы сможете немного больше пояснить @Barmar в ответе, я соглашусь. – Robbie