如何在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 编程引入命名空间的方法
Jun 29 Javascript
Javascript remove 自定义数组删除方法
Oct 20 Javascript
jQuery 过滤not()与filter()实例代码
May 10 Javascript
Jquery:ajax实现翻页无刷新功能代码
Aug 05 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
Feb 28 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
Apr 07 Javascript
AngularJS入门教程之服务(Service)
Jul 27 Javascript
Node.js的基本知识简单汇总
Sep 19 Javascript
webix+springmvc session超时跳转登录页面
Oct 30 Javascript
少女风vue组件库的制作全过程
May 15 Javascript
js实现简单的秒表
Jan 16 Javascript
vue3使用vue-router的完整步骤记录
Jun 20 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
codeigniter使用技巧批量插入数据实例方法分享
2013/12/31 PHP
php实现简单文件下载的方法
2015/01/30 PHP
Zend Framework教程之Zend_Config_Xml用法分析
2016/03/23 PHP
Javascript 函数中的参数使用分析
2010/03/27 Javascript
JQuery入门——事件切换之hover()方法应用介绍
2013/02/05 Javascript
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
js实现点击链接后窗口缩小并居中的方法
2015/03/02 Javascript
简单谈谈javascript中的变量、作用域和内存问题
2015/08/30 Javascript
JavaScript实现点击按钮切换网页背景色的方法
2015/10/17 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
2017/01/17 Javascript
js实现一个页面多个倒计时的3种方法
2019/02/25 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
vue控制多行文字展开收起的实现示例
2019/10/11 Javascript
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
[54:26]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第一场 12.10
2020/12/12 DOTA
Python实现在tkinter中使用matplotlib绘制图形的方法示例
2018/01/18 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
Numpy数组array和矩阵matrix转换方法
2019/08/05 Python
python实现生成Word、docx文件的方法分析
2019/08/30 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
Python Opencv实现单目标检测的示例代码
2020/09/08 Python
python与c语言的语法有哪些不一样的
2020/09/13 Python
纯css3实现的竖形无限级导航
2014/12/10 HTML / CSS
5 个强大的HTML5 API 函数推荐
2014/11/19 HTML / CSS
阿迪达斯丹麦官网:adidas丹麦
2016/10/01 全球购物
国家税务局干部作风整顿整改措施
2014/09/18 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
外出听课学习心得体会
2016/01/15 职场文书
2019年大学生学年自我鉴定!
2019/03/25 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书
超级实用的公文标题大全!
2019/07/19 职场文书
导游词之井冈山
2019/11/20 职场文书
python如何正确使用yield
2021/05/21 Python