在JavaScript中动态创建私有方法

时间:2013-07-26 09:20:31

标签: javascript jquery class plugins prototype

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

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

如果你看一下小提琴示例,你会看到一个$.fn.wPluginTest.extend函数,它允许你传入函数来扩展原型。无论如何还要扩展本地命名空间以添加私有方法吗?

因此,例如,前面带有_的任何函数都将被设置为私有,并且不能通过PluginTest对象公开获得。

1 个答案:

答案 0 :(得分:2)

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实例 - 它们静态地绑定到原型对象 - 所以这可能是一个坏主意。

如果任何插件需要真正的私密性,它应该自己使用变量作用域。