近期,在做学校内部的小项目中,觉得自己的水平并没有得到很大的提升以及看到自己本身的局限性。所以特去图书馆借了几本关于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();//true
house.setAlarmMessage("The alarm is now activated!");
house.lock();