如何在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 innerText和innerHtml应用
Jan 28 Javascript
获取dom元素那些讨厌的位置封装代码
Jun 23 Javascript
Jquery实现自定义窗口随意的拖拽
Mar 12 Javascript
Jquery实现图片预加载与延时加载的方法
Dec 22 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
Apr 15 Javascript
JavaScript实现网页加载进度条代码超简单
Sep 21 Javascript
jQuery1.9+中删除了live以后的替代方法
Jun 17 Javascript
Ionic项目中Native Camera的使用方法
Jun 07 Javascript
解决vue 按钮多次点击重复提交数据问题
May 10 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
Apr 22 Javascript
微信小程序非跳转式组件授权登录的方法示例
May 22 Javascript
js canvas实现五子棋小游戏
Jan 22 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 显示客户端IP与服务器IP的代码
2010/10/12 PHP
PHP中读写文件实现代码
2011/10/20 PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
2015/10/10 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
[原创]php实现数组按拼音顺序排序的方法
2017/05/03 PHP
PHP实现执行外部程序的方法详解
2017/08/17 PHP
jQuery 使用手册(七)
2009/09/23 Javascript
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
jquery的index方法实现tab效果
2011/02/16 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
基于jquery完美拖拽,可返回拖动轨迹
2012/03/29 Javascript
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
2013/09/16 Javascript
js操纵dom生成下拉列表框的方法
2014/02/24 Javascript
Backbone.js框架中简单的View视图编写学习笔记
2016/02/14 Javascript
将List对象列表转换成JSON格式的类实现方法
2016/07/04 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
从零学习node.js之mysql数据库的操作(五)
2017/02/24 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
微信小程序学习笔记之跳转页面、传递参数获得数据操作图文详解
2019/03/28 Javascript
jquery+css3实现的经典弹出层效果示例
2020/05/16 jQuery
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
Python中变量交换的例子
2014/08/25 Python
PyQt5 实现给窗口设置背景图片的方法
2019/06/13 Python
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
临床医学大学生求职信
2013/09/28 职场文书
英文版餐饮业求职信
2013/10/18 职场文书
汽车技术服务英文求职信范文
2014/01/02 职场文书
保安的辞职报告怎么写
2014/01/20 职场文书
小学生运动会报道稿
2014/09/12 职场文书
会议通知
2015/04/15 职场文书
看古人们是如何赞美老师的?
2019/07/08 职场文书
简单介绍 http请求响应参数、无连接无状态、MIME、状态码、端口、telnet、curl
2021/03/31 HTML / CSS
Vue全家桶入门基础教程
2021/05/14 Vue.js
php解析非标准json、非规范json的方式实例
2022/05/10 PHP