如何在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 相关文章推荐
jquery绑定事件不生效的解决方法
Feb 11 Javascript
Linux下编译安装php libevent扩展实例
Feb 14 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
Mar 23 Javascript
浅谈JavaScript字符串拼接
Jun 25 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
Sep 05 Javascript
Jquery操作Ajax方法小结
Nov 29 Javascript
js图片轮播手动切换特效
Jan 12 Javascript
js正则表达式验证密码强度【推荐】
Mar 03 Javascript
浅谈Postman解决token传参的问题
Mar 31 Javascript
快速解决vue-cli在ie9+中无效的问题
Sep 04 Javascript
vue+node实现图片上传及预览的示例方法
Nov 22 Javascript
小程序自定义日历效果
Dec 29 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世纪万年历
2006/12/06 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
php使用curl检测网页是否被百度收录的示例分享
2014/01/31 PHP
PHP中$_FILES的使用方法及注意事项说明
2014/02/14 PHP
PHP 前加at符合@的作用解析
2015/07/31 PHP
使用jQuery简化Ajax开发 Ajax开发入门
2009/10/14 Javascript
Script的加载方法小结
2011/01/12 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
深入理解JavaScript系列(30):设计模式之外观模式详解
2015/03/03 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
2017/07/07 Javascript
JavaScript中运算符规则和隐式类型转换示例详解
2017/09/06 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
Vue 实现输入框新增搜索历史记录功能
2019/10/15 Javascript
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
python装饰器初探(推荐)
2016/07/21 Python
python里使用正则的findall函数的实例详解
2017/10/19 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
Python中拆分字符串的操作方法
2019/07/23 Python
Python搭建代理IP池实现接口设置与整体调度
2019/10/27 Python
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
升学宴主持词
2014/04/02 职场文书
入党介绍人评语
2014/05/06 职场文书
政法干警核心价值观心得体会
2014/09/11 职场文书
2015年大学教师工作总结
2015/05/20 职场文书