如何在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 动画基础教程
Dec 25 Javascript
JS 控件事件小结
Oct 31 Javascript
如何判断元素是否为HTMLElement元素
Dec 06 Javascript
js 获取input点选按钮的值的方法
Apr 14 Javascript
jquery实现简单实用的弹出层效果代码
Oct 15 Javascript
jQuery判断浏览器并动态调整select宽度的方法
Mar 02 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
Apr 18 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
Jul 09 Javascript
基于JavaScript实现自定义滚动条
Jan 25 Javascript
微信小程序获取用户openId的实现方法
May 23 Javascript
vue.js template模板的使用(仿饿了么布局)
Aug 13 Javascript
JavaScript实现简易计算器小功能
Oct 22 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/10/09 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
php调用nginx的mod_zip模块打包ZIP文件
2014/06/11 PHP
php格式文件打开的四种方法
2018/02/24 PHP
PHP 计算两个特别大的整数实例代码
2018/05/07 PHP
php压缩文件夹最新版
2018/07/18 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
php探针使用原理和技巧讲解
2019/09/17 PHP
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
js 创建快捷方式的代码(fso)
2010/11/19 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
用js设置下拉框为只读的小技巧
2014/04/10 Javascript
Javascript基础教程之函数对象和属性
2015/01/18 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
2015/06/24 Javascript
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
JavaScript的this关键字的理解
2016/06/18 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
python判断图片宽度和高度后删除图片的方法
2015/05/22 Python
python搭建微信公众平台
2016/02/09 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
使用python3+xlrd解析Excel的实例
2018/05/04 Python
python的sorted用法详解
2019/06/25 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
python实现小世界网络生成
2019/11/21 Python
python实现扫雷游戏
2020/03/03 Python
Python 线性回归分析以及评价指标详解
2020/04/02 Python
GoDaddy英国:全球排名第一的域名注册商
2018/06/08 全球购物
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
机关出纳岗位职责
2014/04/03 职场文书
软件项目经理岗位职责
2015/04/01 职场文书
新闻稿件写作范文
2015/07/18 职场文书
八年级数学教学反思
2016/02/17 职场文书
css3带你实现3D转换效果
2022/02/24 HTML / CSS