如何在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 相关文章推荐
JavaScript事件列表解说
Dec 22 Javascript
from表单多个按钮提交用onclick跳转不同action
Apr 24 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
Aug 31 Javascript
JavaScript禁止复制与粘贴的实现代码
May 16 Javascript
js将json格式的对象拼接成复杂的url参数方法
May 25 Javascript
jQuery使用each方法与for语句遍历数组示例
Jun 16 Javascript
JavaScript数值千分位格式化的两种简单实现方法
Aug 01 Javascript
Javascript实现数组中的元素上下移动
Apr 28 Javascript
jQuery实现checkbox全选功能完整实例
Jul 12 jQuery
element-ui中按需引入的实现
Dec 25 Javascript
关于vue3默认把所有onSomething当作v-on事件绑定的思考
May 15 Javascript
微信小程序实现分页加载效果
Nov 19 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
PHP对称加密函数实现数据的加密解密
2016/10/27 PHP
用正则xmlHttp实现的偷(转)
2007/01/22 Javascript
JavaScript 字符串连接性能优化
2008/12/20 Javascript
JS实现先显示大图后自动收起显示小图的广告代码
2015/09/04 Javascript
JS实现点击按钮获取页面高度的方法
2015/11/02 Javascript
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
JavaScript对象数组排序函数及六个用法
2015/12/23 Javascript
jQuery取消特定的click事件
2016/02/29 Javascript
Json解析的方法小结
2016/06/22 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
vue.js 获取select中的value实例
2018/03/01 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
解决layui的input独占一行的问题
2019/09/10 Javascript
vue项目或网页上实现文字转换成语音播放功能
2020/06/09 Javascript
[06:14]《辉夜杯》外卡赛附加赛 4支战队巡礼
2015/10/23 DOTA
[40:12]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
python中yield的用法详解——最简单,最清晰的解释
2019/04/04 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
2020/03/08 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
2020/04/24 Python
pytorch 多分类问题,计算百分比操作
2020/07/09 Python
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
大学生职业生涯规划书模板
2014/01/03 职场文书
上班打牌检讨书
2014/02/07 职场文书
学校个人对照检查材料
2014/08/26 职场文书
大学生党员自我批评思想汇报
2014/10/10 职场文书
2014年电话销售工作总结
2014/12/01 职场文书
英文感谢信格式
2015/01/21 职场文书
超市食品安全承诺书
2015/04/29 职场文书
企业安全生产规章制度
2015/08/06 职场文书
500字作文之难忘的同学
2019/12/20 职场文书
详解OpenCV曝光融合
2022/04/29 Python
Windows Server 版本 20H2 于 8 月 9 日停止支持,Win10 版本 21H1 将于 12 月结束支
2022/07/23 数码科技