如何在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 相关文章推荐
基础的prototype.js常用函数及其用法
Mar 10 Javascript
javascript 写类方式之九
Jul 05 Javascript
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
Dec 08 Javascript
理解javascript正则表达式
Mar 08 Javascript
微信小程序 生命周期详解
Oct 12 Javascript
jquery实现输入框实时输入触发事件代码
Dec 21 Javascript
Javascript(es2016) import和require用法和区别详解
Aug 11 Javascript
jquery tmpl模板(实例讲解)
Sep 02 jQuery
手淘flexible.js框架使用和源代码讲解小结
Oct 15 Javascript
JS实现的A*寻路算法详解
Dec 14 Javascript
Vue数据绑定简析小结
May 07 Javascript
video.js添加自定义组件的方法
Dec 09 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中处理模拟rewrite 效果
2006/12/09 PHP
PHP可变函数的使用详解
2013/06/14 PHP
php+ajax实现图片文件上传功能实例
2014/06/17 PHP
PHP文件上传类实例详解
2016/04/08 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
PHP数组操作简单案例分析
2016/10/15 PHP
wordpress网站转移到本地运行测试的方法
2017/03/15 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
jquery ajax 登录验证实现代码
2009/09/23 Javascript
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
2010/11/16 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
2014/01/07 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
js四舍五入数学函数round使用实例
2014/05/09 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
JS实现的网页倒计时数字时钟效果
2015/03/02 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
2015/10/12 Javascript
ES6中非常实用的新特性介绍
2016/03/10 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
JavaScript实现反转字符串的方法详解
2017/04/27 Javascript
vue-cli项目修改文件热重载失效的解决方法
2018/09/19 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
详解python的数字类型变量与其方法
2016/11/20 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
教你使用python画一朵花送女朋友
2018/03/29 Python
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
matplotlib实现热成像图colorbar和极坐标图的方法
2018/12/13 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
python selenium 获取接口数据的实现
2020/12/07 Python
css3实现一个div设置多张背景图片及background-image属性实例演示
2017/08/10 HTML / CSS
HTML5 Canvas像素处理使用接口介绍
2012/12/02 HTML / CSS
Fenty Beauty官网:蕾哈娜创立的美妆品牌
2021/01/07 全球购物
Java里面有没有全局变量?为什么?
2015/02/06 面试题
销售辞职报告范文
2014/01/12 职场文书
八一建军节活动方案
2014/02/10 职场文书
读书月活动方案
2014/05/22 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书