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)
你有什么closured功能的经典例子.
a_private_function是一个只在"外部"匿名函数范围内可见的函数.由于关闭,分配的匿名函数name_of_plugin有权访问外部context因此a_private_function.
这是一件好事,因为您可以保护和隐藏一些函数和变量.
简短的说,绝对没有机会从外部访问一个关闭的变量.
| 归档时间: |
|
| 查看次数: |
2669 次 |
| 最近记录: |