如何在jquery插件中覆盖js函数并访问私有成员

时间:2012-05-17 12:50:58

标签: javascript jquery-plugins override

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

我有一个带有以下代码的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运行实现 - 我在控制台上看到'hello' - 但是emptyList的orignal实现也会运行。所以它真的不是一个被覆盖的功能吗?它更像是一种增强?
  2. 我似乎无法访问变量'list'
  3. 所以,2个问题。我是否正确编写了代码以真正覆盖现有函数?而且,是否可以访问变量'list'?我知道它是封闭的私有成员,但是如果你不能以这种方式访问​​私有成员,那么大概它会使覆盖函数(使用那些私有成员)的能力毫无意义吗?

    或者我错过了什么?

    我已经看过Extending an existing jQuery function,它让我了解如何以这种方式覆盖函数;而且这个Access private members of jQuery plugin表明无法访问闭包的私有成员。

    干杯

0 个答案:

没有答案