1

我想知道是否有人可以提供帮助

我有一个带有以下代码的 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;
};

它有点工作,但是:

  1. 我的 emptyList 实现运行 - 我在控制台上看到“你好” - 但 emptyList 的原始实现也运行。所以它不是一个真正被覆盖的函数是吗?它更像是一种增强?
  2. 我似乎无法访问变量“列表”

所以,2个问题。我是否正确编写了代码以真正覆盖现有功能?而且,是否可以访问变量“列表”?我知道它是闭包的私有成员,但是如果您不能以这种方式访问​​私有成员,大概它会使覆盖函数(使用这些私有成员)的能力变得毫无意义?

还是我错过了什么?

我已经看过扩展现有的 jQuery 函数,它指导我如何以这种方式覆盖函数;还有这个jQuery 插件的访问私有成员,它表明访问闭包的私有成员是不可能的。

干杯

弥敦道

4

0 回答 0