如何在JavaScript中实现私有属性的写类方式(一)
如何在JavaScript中实现私有属性的写类方式(一)
发布时间:2016-12-30 来源:查字典编辑
摘要:之前讨论过JavaScript中的写类方式。但没有讨论私有的实现。这篇看下。我们知道JS中私有属性的实现本质就是var+closure。如下...

之前讨论过JavaScript中的写类方式。但没有讨论私有的实现。这篇看下。

我们知道JS中私有属性的实现本质就是 var + closure。如下

复制代码 代码如下:

function Person(n, a){

// public

this.name = n;

// private

var age = a;

this.getName = function(){

return this.name;

}

this.getAge = function(){

return age;

}

}

测试如下,age是私有的,使用点操作符无法获取到,而只能使用getName方法。

复制代码 代码如下:

var p = new Person('jack',23);

console.log(p.age); // undefined

console.log(p.getAge()); // 23

以上没什么稀奇的,下面我们使用一个工具函数来实现。

复制代码 代码如下:

/**

* @param {String} className

* @param {Function} classImp

*/

function $class(className, classImp){

function clazz(){

if(typeof this.init == "function"){

this.init.apply(this, arguments);

}

}

classImp.call(clazz.prototype);

window[className] = clazz;

}

写一个类

复制代码 代码如下:

$class('Person', function(){

// 私有属性都定义在这

var age = '';

this.init = function(n, a){

// 共有属性挂在this上,初始化

this.name = n;

// 私有属性初始化

age = a;

};

this.getName = function(){

return this.name;

};

this.getAge = function(){

return age;

}

});

new一个实例对象

复制代码 代码如下:

var p = new Person('jack',23);

console.log(p.name); // jack 共有的可使用点操作符获取

console.log(p.age); // undefined 私有的不能通过点操作符获取

console.log(p.getAge()); // 23 私有的age只能通过共有的方法getAge获取

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类