面向对象的JavaScript

来源:互联网 发布:南京浦口永宁网络问政 编辑:程序博客网 时间:2024/06/03 17:48

近期,在做学校内部的小项目中,觉得自己的水平并没有得到很大的提升以及看到自己本身的局限性。所以特去图书馆借了几本关于JavaScript的书继续深造,其中就有

《Pro JavaScript Development》

并希望通过借博客这个平台记录自己的成长过程,且希望能以此激励自己。

JavaScript中公有、私有以及受保护的属性和方法:

//我们将“类”的定义包在一个自我执行的函数里,这个函数返回我们所创建的“类”//并将其保存在一个变量中以便在后面的代码使用var accommodation = (function(){    //定义“类”的构造函数。因为处在一个新的函数内,我们也切换到了一个新的作用域中,    //所以可以使用与保存函数返回值的那个变量相同的名字    function accommodation(){}    var _isLocked = false,        _isAlarmed = false,        _alarmMessage = "Alarm activated!";    //仅在当前作用域中定义的函数(而未在构造函数的原型上定义)也都是“私有的”    function _alarm(){        _isAlarmed = true;        console.log(_alarmMessage);    }    function _disableAlarm(){        _isAlarmded = false;    }    //所有定义在原型上的方法都是“公有的”,当我们在此处创建的“类”在闭包结束处被返回后,就可以    //在当前作用域之外访问这些方法了    accommodation.prototype.lock = function(){        _isLocked = true;        _alarm();    };    accommodation.prototype.unlock = function(){        _isLocked = false;        _disableAlarm();    };    //定义个getter函数来对私有变量_isLocked的值进行只读访问——相当于把变量定义为了“受保护的”    accommodation.prototype.getIsLocked = function(){        return _isLocked;    };    //定义一个setter函数来对私有变量_alarmMessage进行只写访问——相当于将其定义为了“受保护的”    accommodation.prototype.setAlarmMessage = function(message){        _alarmMessage = message;    };    //返回在这个作用域中创建的“类”,使之在外层作用域中即后面代码的所有位置都可用。只有公有的    //属性和方法是可用的    return accommodation;}());//创建一个对象实例var house = new accommodation();house.lock();//输出警告消息“Alarm activated”try{    house._alarm();//}catch(error){    console.log(error + ":错误!_alarm函数从未被公开暴露,所以无法直接通过“类”的对象实例进行访问");}console.log(house.isLocked);//undefined(_isLocked是私有的。在闭包外部访问不到)house.getIsLocked();//truehouse.setAlarmMessage("The alarm is now activated!");house.lock();
1 0
原创粉丝点击