JS类的闭包写法

今天研究了一天闭包.真是众说纷纭.吓得我连闭包的定义都不敢写了.只能说,js如果声明类,可以用这样闭包的写法.

另外这个写法,是从typescript生成的js学来的.想来也算是非常规范的写法了.

先看看怎么使用

  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();

讲解

  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();

其实定义类可以不用这么麻烦,ES2015已经支持class关键字.但是那也基本是个语法糖而已.而且es2015的普及之路还很遥远.所以这种写法还是值得学习的.

转载于:https://my.oschina.net/somereasons/blog/912004

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值