如何在JavaScript中实现私有属性的写类方式(二)
如何在JavaScript中实现私有属性的写类方式(二)
发布时间:2016-12-30 来源:查字典编辑
摘要:上一篇写了个工具函数$class,这篇再完善以下。实现以下功能1,继承2,子类继承父类时,不继承父类的私有属性复制代码代码如下:/***@p...

上一篇写了个工具函数$class,这篇再完善以下。实现以下功能

1,继承

2,子类继承父类时,不继承父类的私有属性

复制代码 代码如下:

/**

* @param {String} className

* @param {String/Function} superCls

* @param {Function} classImp

*/

function $class(className, superCls, classImp){

if(superCls === '') superCls = Object;

function clazz(){

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

this.init.apply(this, arguments);

}

}

var p = clazz.prototype = new superCls();

var _super = superCls.prototype;

window[className] = clazz;

classImp.apply(p, [_super]);

}

先写个父类

复制代码 代码如下:

/**

* 父类 Person

*/

$class('Person','',function(){

// 私有属性age

var age;

this.init = function(n, a){

// 公有属性name

this.name = n;

// 私有属性初始化

age = a;

};

this.getName = function(){

return this.name;

};

this.setName = function(name){

this.name = name;

}

this.getAge = function(){

return age;

};

this.setAge = function(a){

age = a;

};

});

写子类,继承于Person

复制代码 代码如下:

$class("Man",Person, function(supr){

var school;

this.init = function(n, a, s){

supr.init.apply(this, [n,a]);

school = s;

}

this.getSchool = function(){

return school;

};

this.setSchool = function(s){

school = s;

};

});

new一个子类实例

复制代码 代码如下:

var m = new Man('tom', 25, 'pku');

console.log(m.name); // tom 继承父类的共有属性name可以直接使用点操作符获取

console.log(m.age); // undefined 父类的私有属性age不能直接使用点操作符获取

console.log(m.getAge()); // 25 可通过父类的共有方法getAge获取私有属性age

console.log(m.school); // undefined Man自己的私有属性仍然不能通过点操作符获取

console.log(m.getSchool()); // pku 通过getSchool()方法获取私有属性school

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