如何在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 相关文章推荐
HTML-CSS群中单选引发的“事件”
Mar 05 Javascript
javascript中的一些注意事项 更新中
Dec 06 Javascript
JavaScript 学习历程和心得分享
Dec 12 Javascript
js 判断计算字符串长度/判断空的简单方法
Aug 05 Javascript
删除Javascript Object中间的key
Nov 18 Javascript
JS数组合并push与concat区别分析
Dec 17 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
Oct 31 Javascript
基于Javascript实现的不重复ID的生成器
Dec 25 Javascript
Angular.js中ng-if、ng-show和ng-hide的区别介绍
Jan 20 Javascript
vue实现购物车列表
Jun 30 Javascript
html中创建并调用vue组件的几种方法汇总
Nov 17 Javascript
一篇超完整的Vue新手入门指导教程
Nov 18 Vue.js
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
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
在PHP中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
2015/01/22 PHP
php类自动加载器实现方法
2015/07/28 PHP
Js与下拉列表处理问题解决
2014/02/13 Javascript
14个有用的Jquery技巧分享
2015/01/08 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
js实现根据身份证号自动生成出生日期
2015/12/15 Javascript
JavaScript 字符串常用操作小结(非常实用)
2016/11/30 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
Angular4实现动态添加删除表单输入框功能
2017/08/11 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
2017/11/18 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
Vue移动端项目实现使用手机预览调试操作
2020/07/18 Javascript
解决基于 keep-alive 的后台多级路由缓存问题
2020/12/23 Javascript
[03:38]2014DOTA2西雅图国际邀请赛 VG战队巡礼
2014/07/07 DOTA
python轻松查到删除自己的微信好友
2016/01/10 Python
Python实现XML文件解析的示例代码
2018/02/05 Python
Django实现表单验证
2018/09/08 Python
python仿抖音表白神器
2019/04/08 Python
Python Tkinter 简单登录界面的实现
2019/06/14 Python
Python参数类型以及常见的坑详解
2019/07/08 Python
python 和c++实现旋转矩阵到欧拉角的变换方式
2019/12/04 Python
Python unittest单元测试框架及断言方法
2020/04/15 Python
Python如何将模块打包并发布
2020/08/30 Python
深入浅出CSS3 background-clip,background-origin和border-image教程
2011/01/27 HTML / CSS
几个MySql的面试题
2013/04/22 面试题
2014世界杯球队球队口号
2014/06/05 职场文书
党委书记个人对照检查材料
2014/09/15 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
Mysql中 unique列插入重复值该怎么解决呢
2021/05/26 MySQL