我正在创建一个具有扩展功能的 jQuery 插件,允许您从本质上为插件创建插件。
如果您看一下小提琴示例,您将看到一个$.fn.wPluginTest.extend
允许您传入函数以扩展原型的函数。无论如何还要扩展本地命名空间以添加私有方法?
因此,例如_
,前面带有 a 的任何函数都将被设置为私有的,并且不能通过 PluginTest 对象公开使用。
我正在创建一个具有扩展功能的 jQuery 插件,允许您从本质上为插件创建插件。
如果您看一下小提琴示例,您将看到一个$.fn.wPluginTest.extend
允许您传入函数以扩展原型的函数。无论如何还要扩展本地命名空间以添加私有方法?
因此,例如_
,前面带有 a 的任何函数都将被设置为私有的,并且不能通过 PluginTest 对象公开使用。
javascript 对象上没有私有属性,我想说让它们只用下划线作为前缀就可以了。
但是,您可以尝试:
$.fn.wPluginTest.extend = function(funcs) {
var proto = PluginTest.proto,
priv = Object.create(proto); // a private namespace inheriting from proto
for (func in funcs) {
if (func.charAt(0) != '_')
PluginTest.prototype[func] = funcs[func].bind(priv);
else
priv[func.slice(1)] = funcs[func];
// ^^^^^^^^^ not sure, might be confusing
}
}
然而,这些函数将无法访问PluginTest
它们被调用的实例——它们静态绑定到原型对象——所以这可能是个坏主意。
如果任何插件需要真正的隐私,它应该自己使用变量范围。