如何在JavaScript中实现私有属性的写类方式(一)


Posted in Javascript onDecember 04, 2013

之前讨论过JavaScript中的写类方式。但没有讨论私有的实现。这篇看下。

我们知道JS中私有属性的实现本质就是 var + closure。如下

function Person(n, a){ 
    // public 
    this.name = n; 
    // private 
    var age = a; 
    this.getName = function(){ 
        return this.name; 
    } 
    this.getAge = function(){ 
        return age; 
    } 
}

测试如下,age是私有的,使用点操作符无法获取到,而只能使用getName方法。
var p = new Person('jack',23); 
console.log(p.age);  // undefined 
console.log(p.getAge()); // 23

以上没什么稀奇的,下面我们使用一个工具函数来实现。 
/** 
 * @param {String} className 
 * @param {Function} classImp 
 */
function $class(className, classImp){ 
    function clazz(){ 
        if(typeof this.init == "function"){ 
            this.init.apply(this, arguments); 
        } 
    } 
    classImp.call(clazz.prototype); 
    window[className] = clazz; 
}

写一个类
$class('Person', function(){ 
    // 私有属性都定义在这 
    var age = ''; 
    this.init = function(n, a){ 
        // 共有属性挂在this上,初始化 
        this.name = n; 
        // 私有属性初始化 
        age = a; 
    }; 
    this.getName = function(){ 
        return this.name; 
    }; 
    this.getAge = function(){ 
        return age; 
    } 
});

new一个实例对象
var p = new Person('jack',23); 
console.log(p.name); // jack 共有的可使用点操作符获取 
console.log(p.age); // undefined 私有的不能通过点操作符获取 
console.log(p.getAge()); // 23 私有的age只能通过共有的方法getAge获取
Javascript 相关文章推荐
js导出table到excel同时兼容FF和IE示例
Sep 03 Javascript
JQuery中extend的用法实例分析
Feb 08 Javascript
在HTML中插入JavaScript代码的示例
Jun 03 Javascript
原生js实现秒表计时器功能
Feb 16 Javascript
Vue.js -- 过滤器使用总结
Feb 18 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
Mar 02 Javascript
js数组去重的方法总结
Jan 18 Javascript
详解react-refetch的使用小例子
Feb 15 Javascript
vue基于v-charts封装双向条形图的实现代码
Dec 09 Javascript
js绘制一条直线并旋转45度
Aug 21 Javascript
vue使用screenfull插件实现全屏功能
Sep 17 Javascript
使用Typescript开发微信小程序的步骤详解
Jan 12 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
javascript实现信息的显示和隐藏如注册页面
Dec 03 #Javascript
You might like
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
2016/03/07 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
2017/08/02 PHP
Yii框架常见缓存应用实例小结
2019/09/09 PHP
jQuery Ajax提交表单查询获得数据实例代码
2012/09/19 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
jQuery制作简洁的图片轮播效果
2015/04/03 Javascript
JS动态改变浏览器标题的方法
2016/04/06 Javascript
详解JavaScript中的自定义事件编写
2016/05/10 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
2016/08/04 Javascript
jQuery实现的简单拖拽功能示例
2016/09/13 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
MvcPager分页控件 适用于Bootstrap
2017/06/03 Javascript
详解Angular2学习笔记之Html属性绑定
2018/01/03 Javascript
react实现点击选中的li高亮的示例代码
2018/05/24 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
nodejs使用node-xlsx生成excel的方法示例
2019/08/22 NodeJs
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
Jquery $.map使用方法实例详解
2020/09/01 jQuery
[01:20]PWL开团时刻DAY9——听说潮汐没用?
2020/11/10 DOTA
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
使用Python和Scribus创建一个RGB立方体的方法
2019/07/17 Python
详解Python list和numpy array的存储和读取方法
2019/11/06 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
日本小田急百货官网:Odakyu
2018/07/19 全球购物
美国名表在线商城:Ashford(支持中文)
2019/09/24 全球购物
金融管理专业毕业生求职信
2014/03/12 职场文书
三月法制宣传月活动总结
2014/07/03 职场文书
医院义诊活动总结
2014/07/04 职场文书
女性健康讲座主持词
2015/07/04 职场文书
篮球赛新闻稿
2015/07/17 职场文书
2019年新郎保证书3篇
2019/10/17 职场文书