如何在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 While 循环基础教程
Apr 05 Javascript
ext实现完整的登录代码
Aug 08 Javascript
csdn 博客中实现运行代码功能实现
Aug 29 Javascript
iframe子页面获取父页面元素的方法
Nov 05 Javascript
jQuery 如何先创建、再修改、后添加DOM元素
May 20 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
Dec 18 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
Oct 31 Javascript
给localStorage设置一个过期时间的方法分享
Nov 06 Javascript
vue.js循环radio的实例
Nov 07 Javascript
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
May 18 Javascript
详解Vue之事件处理
Jul 10 Javascript
vue修改Element的el-table样式的4种方法
Sep 17 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实现的一个很好用HTML解析器类可用于采集数据
2013/09/23 PHP
一个PHP二维数组排序的函数分享
2014/01/17 PHP
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
比较简单实用的使用正则三种版本的js去空格处理方法
2007/11/18 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
基于jQuery实现动态数字展示效果
2015/08/12 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
2015/10/27 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
JavaScript用构造函数如何获取变量的类型名
2016/12/23 Javascript
详解Vue爬坑之vuex初识
2017/06/14 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
深入浅析Vue.js中 computed和methods不同机制
2018/03/22 Javascript
深入浅析angular和vue还有jquery的区别
2018/08/13 jQuery
JavaScript常见事件处理程序实例总结
2019/01/05 Javascript
vue页面引入three.js实现3d动画场景操作
2020/08/10 Javascript
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
hmac模块生成加入了密钥的消息摘要详解
2018/01/11 Python
Python 从一个文件中调用另一个文件的类方法
2019/01/10 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
2020/10/29 Python
python switch 实现多分支选择功能
2020/12/21 Python
SOKOLOV官网:俄罗斯珠宝首饰品牌
2021/01/02 全球购物
生日派对邀请函
2014/01/13 职场文书
《日月潭》教学反思
2014/02/28 职场文书
《路旁的橡树》教学反思
2014/04/07 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
2014年乡镇领导个人整改措施
2014/09/19 职场文书
工商局副局长个人对照检查材料
2014/09/25 职场文书
法人单位授权委托书范文
2014/10/06 职场文书
学校食品安全责任书
2015/01/29 职场文书
被告答辩状范文
2015/05/22 职场文书
创业计划书之养殖业
2019/10/11 职场文书
十大经典日本动漫排行榜 海贼王第三,犬夜叉仅第八
2022/03/18 日漫