由闭包引起的对javascript代码可维护性的思考

本文探讨了在JavaScript中利用闭包实现数据和方法的封装,以提高代码的可维护性和降低模块间的耦合度。通过一个具体示例,展示了闭包在模拟私有成员变量方面的局限性,并讨论了这如何影响面向对象设计。

在最近的编程实践中由闭包的使用引起了我对javascript代码可维护性的思考。面向对象的其中一个特性封装性通过封装可以降低类与类之间或模块与模块之间耦合性从而使我们的设计更加高内聚低耦合,在大规模的程序开发中这是度量程序可维护性的一个指标,在大量应用了基于javascript的RIA的项目中javascript代码的可维护性也变得越来越值得我们去关注。因为在javascript中没有类的概念,所以我通常会借用闭包来将数据和操作这些数据的方法封装在一起来解决设计中对象的高内聚和对象之间的松耦合的问题,然而当我试图把一个对象的构造函数定在一个闭包中时却对我产生了一些迷惑。
    在下面这个演示中两个对象共享被闭包了的变量t,和_this 本意是想用这个变量来模拟在基于类的面向对象语言中的类的私有成员变量,所以当调用a1.test()方法来输出_this.v的值时这里的_this并不我们所期望的a1对象,它在a2对象被改变了,所以此时_this指向的是我们后创建对象a2的引用。

    在使用javascript库的同时关注真实实现细节,在代码的调试时能让我们更快的找到问题所在。

(function(){   
    var t = 0;
    var _this;
    function Adder(x){
        _this = this;
        _this.v = x;
        t = t + (+x);
    }
    Adder.prototype.test = function (){
        alert(t)
    };
    Adder.prototype.test2 = function (){
        alert(_this.v);
    };
    window.Adder = Adder;
})();
var a1= new Adder(5);
a1.test();//output:5
var a2 = new Adder(1);
a2.test();//output:6
a1.test2();//output:1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值