JS类的闭包写法 https://my.oschina.net/somereasons/blog/912004
先看看怎么使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
var myclass = (function () { function myclass() { //实例变量 this.var1 = 1; this.var2 = "aaa"; //其他初始化代码 ; } //静态变量 myclass.staticVar = 3; //函数的例子 myclass.prototype.func1 = function (a, b) { return a + b } return myclass; }()); var obj=new myclass(); |
讲解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
var myclass = (function mc() { //1.这是类本身,在这里定义变量,并执行初始化. //类特意用mc包起来,是为了看起来清爽一些..否则多个类的代码混在一起.难看 //注意这些this,通常this的作用域是调用者,在这里就是外层的mc.因此this.var1就会存在mc中.外面看不到 //另外,如果不用mc把myclass的代码包起来,this.var1就会存在于window对象上,容易产生内存泄漏 function myclass() { this.var1 = 1; this.var2 = "aaa"; } myclass.staticVar = 3; //2.给类添加方法,很普通的用prototype myclass.prototype.func1 = function (a, b) { return a + b } //3.这里就是闭包了.注意变量var1/2和函数myclass是定义在mc中的. //那么,当mc执行完毕,var1,var2,myclass函数就应该回收. //但是,在这里将myclass作为返回结果,并执行(注意mc函数后面的那个不起眼的()), //那么myclass就会保留下来,而由于闭包的缘故,myclass所引用的var1/2也会保留下来. //这样,一个类,以及其中的成员就成型了. return myclass; }()); var obj=new myclass(); |