如何在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 读取和设置文档元素的样式属性
Apr 14 Javascript
jquery Ajax 实现加载数据前动画效果的示例代码
Feb 07 Javascript
基于jQuery滑动杆实现购买日期选择效果
Sep 15 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
Apr 28 Javascript
JS代码实现根据时间变换页面背景效果
Jun 16 Javascript
JS产生随机数的几个用法详解
Jun 22 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
Oct 15 Javascript
Bootstrap进度条实现代码解析
Mar 07 Javascript
Angular2数据绑定详解
Apr 18 Javascript
node.js中grunt和gulp的区别详解
Jul 17 Javascript
原生JS上传大文件显示进度条 php上传文件代码
Mar 27 Javascript
js中bool值的转换及“&&”、“||”、 “!!”详解
Dec 21 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 和 XML: 使用expat函数(一)
2006/10/09 PHP
PHP Zip解压 文件在线解压缩的函数代码
2010/05/26 PHP
浅析echo(),print(),print_r(),return之间的区别
2013/11/27 PHP
PHP函数实现分页含文本分页和数字分页
2014/10/23 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
mouse_on_title.js
2006/08/25 Javascript
指定js可访问其它域名的cookie的方法
2007/09/18 Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
将string解析为json的几种方式小结
2010/11/11 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
2014/03/06 Javascript
js以及jquery实现手风琴效果
2020/04/17 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
2017/02/21 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
2017/09/20 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
js实现一个简易计算器
2020/03/30 Javascript
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
python登录QQ邮箱发信的实现代码
2013/02/10 Python
python字符串连接的N种方式总结
2014/09/17 Python
python爬虫的数据库连接问题【推荐】
2018/06/25 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
2019/07/17 Python
基于Python解密仿射密码
2019/10/21 Python
pytorch 中forward 的用法与解释说明
2021/02/26 Python
荷兰天然和有机产品网上商城:BigGreenSmile.nl
2020/07/26 全球购物
js正则匹配markdown里的图片标签的实现
2021/03/24 Javascript
学生喝酒检讨书
2014/02/06 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书
群众路线四风自我剖析材料
2014/10/08 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
公司员工奖惩制度
2015/08/04 职场文书
城镇居民医疗保险工作总结
2015/08/10 职场文书
Java 深入探究讲解简单工厂模式
2022/04/07 Java/Android