如何在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 相关文章推荐
Extjs的FileUploadField文件上传出现了两个上传按钮
Apr 29 Javascript
jQuery使用之标记元素属性用法实例
Jan 19 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
Mar 25 Javascript
AngularJS中的Directive实现延迟加载
Jan 25 Javascript
JQuery导航菜单选择特效
Apr 11 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
May 15 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
Feb 27 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
Oct 25 Javascript
如何选择适合你的JavaScript框架
Nov 20 Javascript
使用async await 封装 axios的方法
Jul 09 Javascript
Vue使用mixin分发组件的可复用功能
Sep 01 Javascript
解决Layui数据表格显示无数据提示的问题
Nov 14 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
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
PHP检测接口Traversable用法详解
2017/12/29 PHP
Firefox div高度自适应
2009/04/28 Javascript
js中的referrer返回上一页使用介绍
2013/09/26 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
详谈JavaScript 匿名函数及闭包
2014/11/14 Javascript
jQuery UI插件自定义confirm确认框的方法
2015/03/20 Javascript
jquery ajax局部加载方法详解(实现代码)
2016/05/12 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
2016/09/15 Javascript
AngularJS的Filter的示例详解
2017/03/07 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
基于javaScript的this指向总结
2017/07/22 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
PHP 实现一种多文件上传的方法
2017/09/20 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
基于原生js实现九宫格算法代码实例
2020/07/03 Javascript
Vue解决echart在element的tab切换时显示不正确问题
2020/08/03 Javascript
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
如何解决django配置settings时遇到Could not import settings 'conf.local'
2014/11/18 Python
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
python比较2个xml内容的方法
2015/05/11 Python
Python实现拷贝多个文件到同一目录的方法
2016/09/19 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
学期自我鉴定范文
2013/10/01 职场文书
管理专员自荐信
2014/01/26 职场文书
社团招新策划书
2014/02/04 职场文书
数学教育专业求职信
2014/07/22 职场文书
居委会四风问题个人对照检查材料
2014/09/25 职场文书
2016年九九重阳节活动总结
2016/04/01 职场文书
2019银行竞聘书
2019/06/21 职场文书
创业计划书之香辣虾火锅
2019/09/23 职场文书
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android