封装
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
事实上,我们可以通过 JavaScript 的函数实现封装,封装的好处在于未经授权的客户 代码无法访问到我们不公开的数据,我们来看这个例子:
function Person(name){
//private variable
var address = "The Earth";
//public method
this.getAddress = function(){
return address;
}
//public variable
this.name = name; }
//public
Person.prototype.getName = function(){
return this.name;
}
//public
Person.prototype.setName = function(name){
this.name = name;
}
首先声明一个函数,作为模板,用面向对象的术语来讲,就是一个类。用 var 方式声明的 变量仅在类内部可见,所以 address 为一个私有成员,访问 address 的唯一方法是通过我们向外暴露的 getAddress 方法,而 get/setName,均为原型链上的方法,因此为公开的。
我们可以做个测试:
var jack = new Person("jack");
print(jack.name);//jack
print(jack.getName());//jack
print(jack.address);//undefined
print(jack.getAddress());//The Earth
直接通过 jack.address 来访问 address 变量会得到 undefined。我们只能通过 jack.getAddress 来访问。这样,address 这个成员就被封装起来了。
另外需要注意的一点是,我们可以为类添加静态成员,这个过程也很简单,只需要为函数对象添加一个属性即可。比如:
function Person(name){
//private variable
var address = "The Earth";
//public method
this.getAddress = function(){
return address;
}
//public variable
this.name = name; }
Person.TAG = "javascript-core";//静态变量
print(Person.TAG);
也就是说,我们在访问 Person.TAG 时,不需要实例化 Person 类。这与传统的面向对象语言如 Java 中的静态变量是一致的。
在线练习
{$ activeFileHint $}