如何在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实现切换标签页效果实例代码
Nov 01 Javascript
JS获取几种URL地址的方法小结
Feb 26 Javascript
JQuery中extend使用介绍
Mar 13 Javascript
js处理表格对table进行修饰
May 26 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
Dec 04 Javascript
一些实用性较高的js方法
Apr 19 Javascript
深入解析js轮播插件核心代码的实现过程
Apr 14 Javascript
实例讲解DataTables固定表格宽度(设置横向滚动条)
Jul 11 Javascript
jQuery常用选择器详解
Jul 17 jQuery
微信小程序中遇到的iOS兼容性问题小结
Nov 14 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
May 18 Javascript
Javascript中Microtask和Macrotask鲜为人知的知识点
Apr 02 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出错界面
2006/10/09 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
jquery创建div 实现代码
2009/04/27 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
初步了解javascript面向对象
2015/11/09 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
2016/09/16 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
移动端js图片查看器
2016/11/17 Javascript
JavaScript模块化之使用requireJS按需加载
2017/04/12 Javascript
微信小程序实现图片预览功能
2018/01/31 Javascript
vuex 解决报错this.$store.commit is not a function的方法
2018/12/17 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
Element 默认勾选表格 toggleRowSelection的实现
2019/09/04 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
python中的随机函数random的用法示例
2018/01/27 Python
Python 访问限制 private public的详细介绍
2018/10/16 Python
Python清空文件并替换内容的实例
2018/10/22 Python
python批量获取html内body内容的实例
2019/01/02 Python
浅析python 中大括号中括号小括号的区分
2019/07/29 Python
Python 脚本拉取 Docker 镜像问题
2019/11/10 Python
Python如何把多个PDF文件合并代码实例
2020/02/13 Python
Python Scrapy图片爬取原理及代码实例
2020/06/12 Python
详解CSS3弹性伸缩盒
2020/09/21 HTML / CSS
平面设计求职信
2014/03/10 职场文书
环保倡议书怎么写
2014/05/16 职场文书
高校群众路线教育实践活动剖析材料
2014/10/10 职场文书
学生检讨书怎么写
2015/05/07 职场文书
2015年暑期社会实践总结
2015/07/13 职场文书
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis
MySQL Server 层四个日志
2022/03/31 MySQL