假设我将此代码作为javaScript库:
(function(global) {
var _private = function(x) {
return x;
};
var doSome = function(x) {
return x;
};
var extend = function(x) {
// ?
};
// maybe some inits....
var init= function(x) {
// ?
};
var myLib = {
doSome: doSome,
extend: extend,
};
// CommonJS, AMD, script tag
if (typeof exports !== 'undefined') {
module.exports = myLib;
} else if (typeof define === 'function' && define.amd) {
define(function() {
return myLib;
});
} else {
global.myLib = myLib;
}
})(typeof global !== 'undefined' ? global : window);
我想使用插件,使用私有方法的插件
来扩展此库答案 0 :(得分:3)
您正在创建一个闭包,私有方法应该保密!
只有myLib
个公共职能应该访问私有方法。
另一方面,您可以使用eval()
来完成您想要完成的任务。
调用eval()时,您可以在本地范围内创建一个函数,这样它就可以访问" private"封闭方法。
看一下这个例子:
var x = 2;
var myLib = (function() {
var myLib = {
extend: extend
};
var x = 1;
function extend(name, fn) {
myLib[name] = function() {
eval('var f = '+fn.toString());
return f.apply(this,arguments);
};
}
return myLib;
})();
myLib.extend('a', function() { return x; });
myLib.a();
而不是返回2
,它将返回1
。这是因为它在eval()
函数调用的本地范围内创建了函数。
意味着它可以访问"私人"关闭的成员。
我不建议使用此解决方案,除非您知道自己在做什么。因为你真的不应该用eval()
来玩太多。