我必须升级 1500 LoC JS 模块中的一个小型私有函数,该函数是用The Revealing Module Pattern编写的。
简化的任务如下所示:
var module = module || function (){
function init(){
// you can upgrade init anyhow to be able to replace private_method later in runtime
(function not_important(){console.log("I do some other stuff")})()
}
function public_method(){
private_method()
}
function private_method(){
console.log("original private method")
}
// you can add any methods here, too
return {
init: init,
public_method: public_method,
// and expose them
}
}()
/** this is another script on the page, that uses original module */
module.public_method() // returns "original private method"
/** the third script, that runs only in some environment, and requires the module to work a bit different */
// do any JS magic here to replace private_method
// or call module.init(method_to_replace_private_method)
module.public_method() // I want to see some other behavior from private_method here
我研究过
访问闭包捕获的变量
如何从闭包中获取对象?
已经有问题了,这看起来与我的任务最相关,但没有成功。
我发现的唯一可行的解决方案是重写 function private_method(){}
将this.private_method = function(){...}
其绑定到窗口的内容,这样我就可以在运行时更改它。
但我不会走这条路,因为该方法不再是私有的,而且我无法预测用旧式 ECMAScript 5 编写的旧 100000 LoC 意大利面怪物应用程序中可能会出现什么问题。
HUH函数
守着一只汪
相关分类