我有一个浏览器插件,我已经维护了 5 年,我想在 Firefox 和 Chrome 版本之间分享一些通用代码。
我决定使用Javascript 模块模式,但我遇到了一个问题,例如,加载特定于浏览器的首选项、保存数据和其他与浏览器相关的东西。
我想做的是让共享代码引用虚拟的、可覆盖的方法,这些方法可以在派生的、特定于浏览器的子模块中实现。
这是我到目前为止所获得的一个快速示例,我在 Firebug 控制台中使用我引用的文章中的 Tight Augmentation 方法进行了尝试:
var core = (function(core)
{
// PRIVATE METHODS
var over = function(){ return "core"; };
var foo = function() {
console.log(over());
};
// PUBLIC METHODS
core.over = over;
core.foo = foo;
return core;
}(core = core || {}));
var ff_specific = (function(base)
{
var old_over = base.over;
base.over = function() { return "ff_specific"; };
return base;
}(core));
core.foo();
ff_specific.foo();
不幸的是,对 foo() 的两个调用似乎都打印了“核心”,所以我认为我对某些东西有一个根本的误解。
本质上,我希望能够调用:
get_preference(key)
set_preference(key, value)
load_data(key)
save_data(key, value)
并让每个浏览器做自己的事情。这可能吗?有更好的方法吗?