如何在JavaScript中实现私有属性的写类方式(二)


Posted in Javascript onDecember 04, 2013

上一篇写了个工具函数$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 相关文章推荐
jquery 操作日期、星期、元素的追加的实现代码
Feb 07 Javascript
简略说明Javascript中的= =(等于)与= = =(全等于)区别
Apr 16 Javascript
JavaScript对象和字串之间的转换实例探讨
Apr 21 Javascript
JAVASCRIPT函数作用域和提前声明 分享
Aug 22 Javascript
Linux下编译安装php libevent扩展实例
Feb 14 Javascript
学习JavaScript设计模式(单例模式)
Nov 26 Javascript
jquery 动态增加删除行的简单实例(推荐)
Oct 12 Javascript
JavaScript计时器用法分析【setTimeout和clearTimeout】
Jan 18 Javascript
详解vue-router和vue-cli以及组件之间的传值
Jul 04 Javascript
Vue学习笔记进阶篇之过渡状态详解
Jul 14 Javascript
浅谈Vue SPA 首屏加载优化实践
Dec 15 Javascript
webuploader分片上传的实现代码(前后端分离)
Sep 10 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
Dec 04 #Javascript
JavaScript判断变量是否为undefined的两种写法区别
Dec 04 #Javascript
ExtJS4中使用mixins实现多继承示例
Dec 03 #Javascript
ExtJS4中的requires使用方法示例介绍
Dec 03 #Javascript
利用JS进行图片的切换即特效展示图片
Dec 03 #Javascript
JavaScript伸缩的菜单简单示例
Dec 03 #Javascript
JS window对象的top、parent、opener含义介绍
Dec 03 #Javascript
You might like
PHP的cURL库简介及使用示例
2015/02/06 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
纯文字版返回顶端的js代码
2013/08/01 Javascript
javascript按位非运算符的使用方法
2013/11/14 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
JavaScript获取URL汇总
2015/06/08 Javascript
浅谈javascript中replace()方法
2015/11/10 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
Vue自定义指令详解
2017/07/28 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
2018/09/28 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
2019/01/17 Javascript
VUE v-model表单数据双向绑定完整示例
2019/01/21 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
jQuery HTML获取内容和属性操作实例分析
2020/05/20 jQuery
[47:45]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第一场 2月26日
2021/03/11 DOTA
python查找第k小元素代码分享
2013/12/18 Python
python中去空格函数的用法
2014/08/21 Python
Django 中间键和上下文处理器的使用
2019/03/17 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
Python爬虫 urllib2的使用方法详解
2019/09/23 Python
python实现四人制扑克牌游戏
2020/04/22 Python
python判断字符串以什么结尾的实例方法
2020/09/18 Python
美国知名玩具品牌:Melissa & Doug
2016/08/16 全球购物
德国化妆品和天然化妆品网上商店:kosmetikfuchs.de
2017/06/09 全球购物
纽约服装和生活方式品牌:Saturdays NYC
2017/08/13 全球购物
GoPro摄像机美国官网:美国运动相机厂商
2018/07/03 全球购物
汽车专业毕业生自荐信
2013/11/03 职场文书
生产车间班组长岗位职责
2014/01/06 职场文书
新书吧创业计划书
2014/01/31 职场文书
面试后感谢信
2014/02/01 职场文书
优秀少先队工作者事迹材料
2014/05/13 职场文书
2015试用期转正工作总结
2014/12/12 职场文书
保研推荐信范文
2015/03/25 职场文书
使用vuex-persistedstate本地存储vuex
2022/04/29 Vue.js