我想知道是否有人可以提供帮助
我有一个带有以下代码的 jQuery 插件:
....
$.Autocompleter.Select = function (options, input, select, config) {
var list;
....
return {
emptyList: function (){
list && list.empty();
}
}
}
我想覆盖 emptyList 函数;并编写了以下代码:
originalAutoCompleteSelectFunction = $.Autocompleter.Select;
$.Autocompleter.Select = function (options, input, select, config) {
var ret = originalAutoCompleteSelectFunction.apply(this, arguments);
ret.emptyList = function() {
console.log ("hello");
console.log ("The list=" + list);
};
return ret;
};
它有点工作,但是:
- 我的 emptyList 实现运行 - 我在控制台上看到“你好” - 但 emptyList 的原始实现也运行。所以它不是一个真正被覆盖的函数是吗?它更像是一种增强?
- 我似乎无法访问变量“列表”
所以,2个问题。我是否正确编写了代码以真正覆盖现有功能?而且,是否可以访问变量“列表”?我知道它是闭包的私有成员,但是如果您不能以这种方式访问私有成员,大概它会使覆盖函数(使用这些私有成员)的能力变得毫无意义?
还是我错过了什么?
我已经看过扩展现有的 jQuery 函数,它指导我如何以这种方式覆盖函数;还有这个jQuery 插件的访问私有成员,它表明访问闭包的私有成员是不可能的。
干杯
弥敦道