如何在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对单选框(radio)操作的小例子
Apr 25 Javascript
编写简单的jQuery提示插件
Dec 21 Javascript
JavaScript实现数字数组正序排列的方法
Apr 06 Javascript
JavaScript基础——使用Canvas绘图
Nov 02 Javascript
JS双击变input框批量修改内容
Dec 12 Javascript
微信小程序中进行地图导航功能的实现方法
Jun 29 Javascript
ndm:NPM的桌面GUI应用程序
Oct 15 Javascript
vue-router之实现导航切换过渡动画效果
Oct 31 Javascript
用Golang运行JavaScript的实现示例
Nov 25 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
Aug 22 Javascript
Angular CLI发布路径的配置项浅析
Mar 29 Javascript
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
Apr 30 Vue.js
如何在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
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
PHP备份/还原MySQL数据库的代码
2011/01/06 PHP
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
2011/03/29 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
PHP环境中Memcache的安装和使用
2015/11/05 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
Laravel实现表单提交
2017/05/07 PHP
学习并汇集javascript匿名函数
2010/11/25 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
script不刷新页面的联动前后代码
2013/09/18 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
2014/06/30 Javascript
JavaScript实现自动消除按钮功能的方法
2015/08/05 Javascript
js中常用的Math方法总结
2017/01/12 Javascript
源码分析Vue.js的监听实现教程
2017/04/23 Javascript
教你用Cordova打包Vue项目的方法
2017/10/17 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
详解Node.js读写中文内容文件操作
2018/10/10 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
2019/06/12 jQuery
微信小程序实现侧边栏分类
2019/10/21 Javascript
[01:06:25]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
Python中的各种装饰器详解
2015/04/11 Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
在python中pandas的series合并方法
2018/11/12 Python
python使用mitmproxy抓取浏览器请求的方法
2019/07/02 Python
Python如何使用turtle库绘制图形
2020/02/26 Python
django xadmin action兼容自定义model权限教程
2020/03/30 Python
python实现数字炸弹游戏程序
2020/07/17 Python
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
介绍一下Cookie和Session及他们之间的区别
2012/11/20 面试题
计算机应用职专应届生求职信
2013/11/12 职场文书
开办化妆品公司创业计划书
2013/12/26 职场文书
出纳担保书范文
2014/04/02 职场文书
党支部考察鉴定意见
2015/06/02 职场文书
React实现动效弹窗组件
2021/06/21 Javascript