JavaScript入门教程

JavaScript简介
JavaScript语法基础
JavaScript流程控制
JavaScript函数
面向对象编程
JavaScript事件
JavaScript DOM
正则表达式
JavaScript BOM
AJAX

专题分析

浏览器兼容性
JS优化
Web前端开发规范
编辑器推荐
总结和笔记

学习助手

对象参考手册
ECMAScript分析
数据中心
QQ交流群

JS 封装

事实上,我们可以通过 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 中的静态变量是一致的。