如何在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 While 循环基础教程
Apr 05 Javascript
JS 去前后空格大全(IE9亲测)
Jul 15 Javascript
jquery 定位input元素的几种方法小结
Jul 28 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
Feb 22 Javascript
Jquery validation remote 验证的缓存问题解决方法
Mar 25 Javascript
采用call方式实现js继承
May 20 Javascript
javascript实现控制文字大中小显示
Apr 28 Javascript
vue自定义全局组件(自定义插件)的用法
Jan 30 Javascript
详解JSON Web Token 入门教程
Jul 30 Javascript
VUE脚手架具体使用方法
May 20 Javascript
JavaScript怎样在删除前添加确认弹出框?
May 27 Javascript
Vue Router中应用中间件的方法
Aug 06 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中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
2010/07/09 PHP
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
PHP页面间参数传递的四种方法详解
2013/06/09 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
2013/06/26 PHP
php简单的留言板与回复功能具体实现
2014/02/19 PHP
php将数组存储为文本文件方法汇总
2015/10/28 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
2016/05/22 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
2019/08/02 PHP
onpropertypchange
2006/07/01 Javascript
发现的以前不知道的函数
2006/09/19 Javascript
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
javascript实现yield的方法
2013/11/06 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
jQuery $.each遍历对象、数组用法实例
2015/04/16 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
Backbone.js框架中简单的View视图编写学习笔记
2016/02/14 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
2017/02/24 Javascript
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
2017/12/01 Javascript
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
基于python实现学生管理系统
2018/10/17 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
CSS3中的opacity属性使用教程
2015/08/19 HTML / CSS
HTML5拖放API实现拖放排序的实例代码
2017/05/11 HTML / CSS
中国领先的汽车保养服务平台:途虎养车
2019/10/18 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
运动会通讯稿150字
2014/02/15 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
演讲比赛的活动方案
2014/08/28 职场文书
先进个人材料怎么写
2014/12/30 职场文书
详解JavaScript中的执行上下文及调用堆栈
2021/04/29 Javascript
java如何实现获取客户端ip地址的示例代码
2022/04/07 Java/Android
详细介绍python操作RabbitMq
2022/04/12 Python