如何在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 相关文章推荐
js或css实现滚动广告的几种方案
Jan 28 Javascript
学习并汇集javascript匿名函数
Nov 25 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
Jan 17 Javascript
from 表单提交返回值用post或者是get方法实现
Aug 21 Javascript
jquery如何获取复选框的值
Dec 12 Javascript
使用text方法获取Html元素文本信息示例
Sep 01 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
Jan 13 Javascript
D3.js实现文本的换行详解
Oct 14 Javascript
集成vue到jquery/bootstrap项目的方法
Feb 10 jQuery
详解vue 数组和对象渲染问题
Sep 21 Javascript
vue切换菜单取消未完成接口请求的案例
Nov 13 Javascript
React服务端渲染原理解析与实践
Mar 04 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读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
2012/07/31 PHP
php.ini中的request_order推荐设置
2015/05/10 PHP
PHP json_encode() 函数详解及中文乱码问题
2015/11/05 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
htm调用JS代码
2007/03/15 Javascript
angularjs实现与服务器交互分享
2014/06/24 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
学习JavaScript设计模式之装饰者模式
2016/01/19 Javascript
浅谈js中几种实用的跨域方法原理详解
2016/12/02 Javascript
javascript编写简易计算器
2017/05/06 Javascript
Bootstrap Table使用整理(四)之工具栏
2017/06/09 Javascript
vue中配置mint-ui报css错误问题的解决方法
2017/10/11 Javascript
angular4中关于表单的校验示例
2017/10/16 Javascript
JS实现的文件拖拽上传功能示例
2018/05/21 Javascript
Element Dialog对话框的使用示例
2020/07/26 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
[54:08]LGD女子刀塔学院 DOTA2炼金术士教学
2014/01/09 DOTA
python 的列表遍历删除实现代码
2020/04/12 Python
详解Python中的Descriptor描述符类
2016/06/14 Python
python读取和保存视频文件
2018/04/16 Python
Python学习_几种存取xls/xlsx文件的方法总结
2018/05/03 Python
python3写的简单本地文件上传服务器实例
2018/06/04 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
2019/09/24 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
python 实现仿微信聊天时间格式化显示的代码
2020/04/17 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
css3实例教程 一款纯css3实现的发光屏幕旋转特效
2014/12/07 HTML / CSS
css3针对移动端卡顿问题的解决(动画性能优化)
2020/02/14 HTML / CSS
详解HTML5 录音的踩坑之旅
2017/12/26 HTML / CSS
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
测试驱动开发的主要步骤是什么
2014/12/10 面试题
高中生期末评语大全
2014/01/28 职场文书
《争吵》教学反思
2014/02/15 职场文书
网站出售协议书范文
2014/10/10 职场文书
市场营销计划书范文
2015/01/16 职场文书