如何在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 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(5)
Dec 23 Javascript
JavaScript 异步调用框架 (Part 1 - 问题 & 场景)
Aug 03 Javascript
学习并汇集javascript匿名函数
Nov 25 Javascript
JS复制到剪贴板示例代码
Oct 30 Javascript
js实现按钮控制图片360度翻转特效的方法
Feb 17 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
Jun 01 Javascript
js中unicode转码方法详解
Oct 09 Javascript
bootstrap学习笔记之初识bootstrap
Jun 21 Javascript
jQuery获取file控件中图片的宽高与大小
Aug 04 Javascript
vue动画效果实现方法示例
Mar 18 Javascript
JavaScript链式调用原理与实现方法详解
May 16 Javascript
jQuery实现增删改查
Dec 22 jQuery
如何在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中::、->、self、$this几种操作符的区别介绍
2013/04/24 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
extjs 为某个事件设置拦截器
2010/01/15 Javascript
js操作时间(年-月-日 时-分-秒 星期几)
2010/06/20 Javascript
克隆javascript对象的三个方法小结
2011/01/12 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
基于JQuery 滑动与动画的说明介绍
2013/04/18 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
JavaScript学习笔记之Function对象
2015/01/22 Javascript
javascript手工制作悬浮菜单
2015/02/12 Javascript
js实现鼠标感应向下滑动隐藏菜单的方法
2015/02/20 Javascript
JavaScript、tab切换完整版(自动切换、鼠标移入停止、移开运行)
2016/01/05 Javascript
仅9张思维导图帮你轻松学习Javascript 就这么简单
2016/06/01 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
2016/06/07 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
angular实现图片懒加载实例代码
2017/06/08 Javascript
vue.js国际化 vue-i18n插件的使用详解
2017/07/07 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
2017/08/24 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
微信小程序常用简易小函数总结
2019/02/01 Javascript
es6数组includes()用法实例分析
2020/04/18 Javascript
Python 实现递归法解决迷宫问题的示例代码
2020/01/12 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
django模板获取list中指定索引的值方式
2020/05/14 Python
html5 桌面提醒:Notifycations应用介绍
2012/11/27 HTML / CSS
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
杭州-DOTNET笔试题集
2013/09/25 面试题
调研座谈会发言材料
2014/08/23 职场文书
司法局群众路线教育实践活动整改措施
2014/09/17 职场文书
销售员岗位职责
2015/02/10 职场文书
保护环境建议书作文400字
2015/09/14 职场文书
小学生节约用水倡议书
2019/08/12 职场文书
js实现上传图片到服务器
2021/04/11 Javascript