【发布时间】:2012-09-06 16:22:34
【问题描述】:
我有一个浏览器插件,我已经维护了 5 年,我想分享一些 Firefox 和 Chrome 版本之间的通用代码。
我决定使用Javascript Module Pattern,但遇到了问题,例如,加载特定于浏览器的首选项、保存数据和其他与浏览器相关的内容。
我想做的是让共享代码引用虚拟的、可覆盖的方法,这些方法可以在派生的、特定于浏览器的子模块中实现。
以下是我目前在 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)
并让每个浏览器做自己的事情。这可能吗?有没有更好的方法?
【问题讨论】:
标签: javascript overriding virtual-functions