如何在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实现无刷新更新数据的详细步骤 asp
Dec 26 Javascript
javascript图像处理—仿射变换深度理解
Jan 16 Javascript
jquery 日期控件datepicker属性详细解析
Nov 08 Javascript
jQuery实现的多级下拉菜单效果代码
Aug 24 Javascript
谈谈JavaScript中function多重理解
Aug 28 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
Sep 19 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
Nov 03 Javascript
vue组件中使用iframe元素的示例代码
Dec 13 Javascript
基于JS实现html中placeholder属性提示文字效果示例
Apr 19 Javascript
详解JavaScript中的强制类型转换
Apr 15 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
Oct 23 Javascript
JavaScript Image对象实现原理实例解析
Aug 26 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(三)
2012/03/22 PHP
高性能PHP框架Symfony2经典入门教程
2014/07/08 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
2019/02/27 PHP
Prototype使用指南之range.js
2007/01/10 Javascript
JS操作select下拉框动态变动(创建/删除/获取)
2013/06/02 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
浅谈Jquery核心函数
2015/06/18 Javascript
js实现日历与定时器
2017/02/22 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
2017/04/28 jQuery
Javascript中的作用域及块级作用域
2017/12/08 Javascript
Vue微信项目按需授权登录策略实践思路详解
2018/05/07 Javascript
vue实现简单loading进度条
2018/06/06 Javascript
JS实现数组深拷贝的方法分析
2019/03/06 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
jquery实现上传文件进度条
2020/03/26 jQuery
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
简单介绍Python中的struct模块
2015/04/28 Python
Python基础教程之tcp socket编程详解及简单实例
2017/02/23 Python
Python的地形三维可视化Matplotlib和gdal使用实例
2017/12/09 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
Python闭包执行时值的传递方式实例分析
2018/06/04 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
python3中property使用方法详解
2019/04/23 Python
python数据化运营的重要意义
2019/11/25 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
HTML5 Canvas实现360度全景图的示例代码
2018/01/29 HTML / CSS
Notino瑞典:购买香水和美容产品
2019/07/26 全球购物
介绍一下#error预处理
2015/09/25 面试题
工程现场管理求职自荐信
2013/10/02 职场文书
市三好学生主要事迹
2014/01/28 职场文书
欢送退休感言
2014/02/08 职场文书
个人年终总结范文
2015/03/09 职场文书
基于Python实现流星雨效果的绘制
2022/03/18 Python
virtualenv隔离Python环境的问题解析
2022/06/21 Python