如何在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 学习笔记(八)javascript对象
Apr 12 Javascript
使用jsonp完美解决跨域问题
Nov 27 Javascript
浅谈jquery.fn.extend与jquery.extend区别
Jul 13 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
Nov 29 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
Dec 03 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
Apr 29 Javascript
Angularjs的ng-repeat中去除重复数据的方法
Aug 05 Javascript
es6学习笔记之Async函数基本教程
May 11 Javascript
Node.js+Express+MySql实现用户登录注册功能
Jul 10 Javascript
详解Vue2 SSR 缓存 Api 数据
Nov 20 Javascript
js中this的指向问题归纳总结
Nov 28 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
Mar 06 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
全国FM电台频率大全 - 5 内蒙古自治区
2020/03/11 无线电
php环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
2006/11/17 PHP
ThinkPHP使用smarty模板引擎的方法
2014/07/01 PHP
PHP实现加强版加密解密类实例
2015/07/29 PHP
PHP下载文件函数与用法示例
2019/09/27 PHP
疯掉了,尽然有js写的操作系统
2007/04/23 Javascript
JavaScript DOM学习第四章 getElementByTagNames
2010/02/19 Javascript
cument.execCommand()用法深入理解
2012/12/04 Javascript
Javascript基础知识(二)事件
2014/09/29 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
2017/11/15 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
JavaScript函数的特性与应用实践深入详解
2018/12/30 Javascript
vue element动态渲染、移除表单并添加验证的实现
2019/01/16 Javascript
JavaScript中var的重要性实例分析
2019/07/09 Javascript
简述vue-cli中chainWebpack的使用方法
2019/07/30 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
2019/08/27 Javascript
three.js如何实现3D动态文字效果
2021/03/03 Javascript
[01:05:59]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
python利用lxml读写xml格式的文件
2017/08/10 Python
python 删除大文件中的某一行(最有效率的方法)
2017/08/19 Python
Python的地形三维可视化Matplotlib和gdal使用实例
2017/12/09 Python
python实现百万答题自动百度搜索答案
2018/01/16 Python
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
Python unittest模块用法实例分析
2018/05/25 Python
详解有关PyCharm安装库失败的问题的解决方法
2020/02/02 Python
基于pandas向csv添加新的行和列
2020/05/25 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
服装销售人员求职自我评价
2013/09/26 职场文书
党的群众教育实践活动实施方案
2014/06/12 职场文书
2014年民政局关于保密工作整改措施
2014/09/19 职场文书
环境保护宣传标语大全!
2019/06/28 职场文书
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python
golang连接MySQl使用sqlx库
2022/04/14 Golang
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL