我正在研究制作JavaScript库的系统。我已经看到大多数库使用"Immediately Invoked Function Expression"等方法。这个方法对我来说使代码完全不可读。
我想知道使用这种方法有什么好处?
使用基本.prototype
系统创建库有什么限制?
例如,使用此模式创建库有什么问题?:
function Library(){
this.property = 'val';
}
Library.prototype.method = function(){
// a method
}
//and to use the library
var lib = new Library();
答案 0 :(得分:2)
立即执行的函数基本上只是一种避免使用应该是私有的变量来污染全局范围的方法。
您的方法很好,但如果您希望您的图书馆内部引用不属于公开 API的私有数据,该怎么办?例如:
var Some_class = (function() {
var foobar = 'foo'; //private; library can read it but public API can't
var api = function() { /* constructor */ };
api.prototype.method = function() { return foobar == 'foo' ? 1 : 0; }
return api;
})();
var instance = new Some_class();
instance.method();
foobar
是一个私有(即内部)变量供您的库使用,但不能通过其API公开访问。