本文介绍JavaScript中通过函数作用域实现信息封装的技术。重点讲解如何利用特权方法访问私有数据,以及公有方法在原型链上的内存优化机制。通过Person类示例,演示如何平衡数据隐私与内存效率,掌握JavaScript面向对象编程的核心概念。
JavaScript对象的信息封装
JavaScript对象的信息封装
在开始编写代码之前,有必要先明确几个核心概念。
封装是指将内部数据的表现形式及具体实现细节隐藏起来,不对外直接暴露。
私有属性和方法是指那些无法被外部直接访问的成员,外界只能通过公开的接口进行存取和交互。
在JavaScript中,作用域的概念仅存在于函数级别。这意味着在函数内部定义的变量或方法,在函数外部是无法直接访问的。
特权方法是指定义在函数内部的方法,它能够访问函数内部的变量(即私有属性)。需要注意的是,每创建一个实例,就会生成一个新的特权方法副本,这会消耗较多的内存空间。
p.setData("sky", "26", "vece@vip.qq.com");
特权方法与公有方法的实现
具体实现代码如下:
function Person() {
{
/*
/* 声明私有的数据成员 */
/* 包括昵称、年龄和邮箱 */
*/
var nickName, age, email;
/*
/* 定义需要访问私有数据的方法(即特权方法) */
/* 注意:每生成一个实例,都会为特权方法创建一个新的副本,这会占用更多内存 */
*/
this.setData = function(pNickName, pAge, pEmail) {
{
nickName = pNickName;
age = pAge;
email = pEmail;
};
};
{
this.getData = function() {
}
}
/*
return [nickName, age, email];
};
*/
/* 定义不需要直接访问私有数据的方法(即公有方法) */
/* 无论生成多少个实例,公有方法在内存中只存在一份,通过原型链共享 */
{
Person.prototype = {
}
} showData: function() {
p.showData();
alert("个人信息:" + this.getData().join());
},
p.setData("sky", "26", "vece@vip.qq.com");
外部代码通过调用私有或公有方法来存取内部属性。代码使用示例
使用示例代码如下:
var p = new Person();