如何在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优化技巧(文件瘦身篇)
Jan 28 Javascript
写自已的js类库需要的核心代码
Jul 16 Javascript
原始XMLHttpRequest方法详情回顾
Nov 28 Javascript
调用innerHTML之后onclick失效问题的解决方法
Jan 28 Javascript
js中array的sort()方法使用介绍
Feb 20 Javascript
使用javascript获取页面名称
Dec 23 Javascript
js随机生成字母数字组合的字符串 随机动画数字
Sep 02 Javascript
jquery插件jquery.confirm弹出确认消息
Dec 22 Javascript
javascript常见数字进制转换实例分析
Apr 21 Javascript
浅析JavaScript中的array数组类型系统
Jul 18 Javascript
node.js中express模块创建服务器和http模块客户端发请求
Mar 06 Javascript
Vue项目利用axios请求接口下载excel
Nov 17 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
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
2009/03/13 PHP
PHP的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
PHP实现Session入库/存入redis的方法
2017/05/04 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
2019/05/27 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
javascript jQuery $.post $.ajax用法
2008/07/09 Javascript
网页整体变灰白色(兼容各浏览器)实例
2013/04/21 Javascript
javascript中的正则表达式使用指南
2015/03/01 Javascript
JS简单实现String转Date的方法
2016/03/02 Javascript
利用JS实现数字增长
2016/07/28 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
详解Nodejs之npm&package.json
2017/06/15 NodeJs
js编写简单的聊天室功能
2017/08/17 Javascript
js实现Tab选项卡切换效果
2020/07/17 Javascript
详解Node 定时器
2018/02/26 Javascript
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
vue 中固定导航栏的实例代码
2019/11/01 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
Python中的列表知识点汇总
2015/04/14 Python
Python复数属性和方法运算操作示例
2017/07/21 Python
PyQt5 实现给窗口设置背景图片的方法
2019/06/13 Python
余弦相似性计算及python代码实现过程解析
2019/09/18 Python
python help函数实例用法
2020/12/06 Python
简单叙述一下MYSQL的优化
2016/05/09 面试题
电气工程自动化求职信
2014/03/14 职场文书
保密协议书范本
2014/04/22 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
2014年售后服务工作总结
2014/11/18 职场文书
义诊活动总结
2015/02/04 职场文书
个性发展自我评价2015
2015/03/09 职场文书
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
2022/04/30 Vue.js
Hive HQL支持2种查询语句风格
2022/06/25 数据库