访问jQuery插件的私有成员

And*_*eKR 6 javascript jquery

jQuery插件使用这样的模式来隐藏插件的私有函数:

(function ($) {
    var a_private_function = function (opts) {
        opts.onStart();
    }

    $.fn.name_of_plugin = function (options) {
        a_private_function(opts);
    }
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

然后jQuery使这些fn函数可用如下:

some_callback = function() {};

jQuery('selector').name_of_plugin( { onStart: some_callback } );
Run Code Online (Sandbox Code Playgroud)

现在我想覆盖a_private_function.有没有办法在不修补实际插件代码的情况下访问它?

我想也许我可以通过使用调用者来访问私有函数的执行上下文但是这不起作用:

some_callback = function() {
    console.log(some_callback.caller.a_private_function); // -> undefined
};

jQuery('selector').name_of_plugin( { onStart: some_callback } );
Run Code Online (Sandbox Code Playgroud)

jus*_*tkt 5

正如我在本回答中所了解到的,访问jQuery插件的私有成员的唯一方法是修改插件源本身.


jAn*_*ndy 5

你有什么closured功能的经典例子.

a_private_function是一个在"外部"匿名函数范围内可见的函数.由于关闭,分配的匿名函数name_of_plugin有权访问外部context因此a_private_function.

这是一件好事,因为您可以保护和隐藏一些函数和变量.

简短的说,绝对没有机会从外部访问一个关闭的变量.