如何在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 相关文章推荐
Cookie 小记
Apr 01 Javascript
菜鸟学习JavaScript小实验之函数引用
Nov 17 Javascript
关于递归运算的顺序测试代码
Nov 30 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
Aug 09 Javascript
鼠标放在图片上显示大图的JS代码
Mar 26 Javascript
JS图片无缝、平滑滚动代码
Mar 11 Javascript
动态加载jQuery的两种方法实例分析
Jul 17 Javascript
jQuery插件WebUploader实现文件上传
Nov 07 Javascript
微信小程序 toast 详解及实例代码
Nov 09 Javascript
jquery dataTable 后台加载数据并分页实例代码
Jun 07 jQuery
微信小程序实现滚动消息通知
Feb 02 Javascript
Vue组件模板及组件互相引用代码实例
Mar 11 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
ASP知识讲座四
2006/10/09 PHP
PHP网站备份程序代码分享
2011/06/10 PHP
php strnatcmp()函数的用法总结
2013/11/27 PHP
微信支付PHP SDK之微信公众号支付代码详解
2015/12/09 PHP
php简单实现多维数组排序的方法
2016/09/30 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
jQuery ctrl+Enter shift+Enter实现代码
2010/02/07 Javascript
js事件冒泡实例分享(已测试)
2013/04/23 Javascript
js动态往表格的td中添加图片并注册事件
2014/06/12 Javascript
Javascript闭包用法实例分析
2015/01/23 Javascript
简单谈谈javascript代码复用模式
2015/01/28 Javascript
JavaScript获取当前网页最后修改时间的方法
2015/04/03 Javascript
JavaScript创建闭包的两种方式的优劣与区别分析
2015/06/22 Javascript
js实现正则匹配中文标点符号的方法
2015/12/23 Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
2016/01/23 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
微信小程序实现导航栏和内容上下联动功能代码
2020/06/29 Javascript
JS实现拖动模糊框特效
2020/08/25 Javascript
[07:47]DOTA2国际邀请赛采访专栏:探访Valve总部
2013/08/08 DOTA
Python多层装饰器用法实例分析
2018/02/09 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
详解查看Python解释器路径的两种方式
2020/10/15 Python
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
iHerb台湾:维生素、保健品和健康产品
2018/01/31 全球购物
十八届三中全会学习方案
2014/02/16 职场文书
3的组成教学反思
2014/04/30 职场文书
小学教师暑期培训方案
2014/08/28 职场文书
四风对照检查材料思想汇报
2014/09/20 职场文书
庆祝新中国成立65周年“向国旗敬礼”网上签名寄语
2014/09/27 职场文书
人事任命通知书
2015/04/21 职场文书
医德医风学习心得体会
2016/01/25 职场文书
告诉你一个秘密:富人致富的五大优点
2019/07/11 职场文书
漫画《催眠麦克风-Dawn Of Divisions》第二卷PV公开
2022/04/05 日漫
Centos7 Shell编程之正则表达式、文本处理工具详解
2022/08/05 Servers