我正在创建一个具有扩展功能的jQuery插件,允许您从本质上为该插件创建插件。

http://jsfiddle.net/eeBEJ/1/

如果查看小提琴示例,您将看到一个$.fn.wPluginTest.extend函数,该函数允许您传入函数以扩展原型。无论如何,是否还要扩展本地名称空间以添加私有方法?

因此,例如,前面带有_的所有函数都将被设置为私有函数,而不能通过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实例-它们静态绑定至原型对象-因此,这可能不是一个好主意。

如果任何插件需要真正的私有性,则应自行利用变量作用域。

10-04 15:03