如何在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 学习之一 对象访问
Nov 23 Javascript
js操作table示例(个人心得)
Nov 29 Javascript
jQuery动态背景图片效果实现方法
Jul 03 Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
Jan 09 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
Mar 27 Javascript
jquery之基本选择器practice(实例讲解)
Sep 30 jQuery
vue.js 实现图片本地预览 裁剪 压缩 上传功能
Mar 01 Javascript
vue-router 实现导航守卫(路由卫士)的实例代码
Sep 02 Javascript
微信小程序 image组件遇到的问题
May 28 Javascript
JavaScript对象属性操作实例解析
Feb 04 Javascript
Vue中多元素过渡特效的解决方案
Feb 05 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
May 03 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错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
2014/05/04 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
2017/06/02 PHP
Js中sort()方法的用法
2006/11/04 Javascript
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
JavaScript的变量作用域深入理解
2009/10/25 Javascript
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
javascript中CheckBox全选终极方案
2015/05/20 Javascript
JS中dom0级事件和dom2级事件的区别介绍
2016/05/05 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
2016/07/08 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
JavaScript闭包和范围实例详解
2016/12/19 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
JavaScript实现的XML与JSON互转功能详解
2017/02/16 Javascript
使用cookie绕过验证码登录的实现代码
2017/10/12 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
微信小程序网络请求封装示例
2018/07/24 Javascript
vue中的计算属性实例详解
2018/09/19 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
2019/10/30 Javascript
详解vue 组件
2020/06/11 Javascript
微信小程序实现购物车小功能
2020/12/30 Javascript
Python实现的彩票机选器实例
2015/06/17 Python
Python数据库的连接实现方法与注意事项
2016/02/27 Python
Python使用PIL库实现验证码图片的方法
2016/03/11 Python
深入理解python中的闭包和装饰器
2016/06/12 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
关于Python3 lambda函数的深入浅出
2019/11/27 Python
斯德哥尔摩通票:Stockholm Pass
2018/01/09 全球购物
全球领先的美容用品专卖店:Beauty Plus Salon
2018/09/04 全球购物
澳大利亚玩具剧场:Toy Playhouse
2019/03/03 全球购物
营销团队口号
2014/06/06 职场文书
完整版商业计划书
2014/09/15 职场文书
2014年局领导班子自身建设情况汇报
2014/11/21 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android