如何在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的实现原理的模拟代码 -4 重要的扩展函数 extend
Aug 03 Javascript
JQuery扩展插件Validate 2通过参数设置验证规则
Sep 05 Javascript
jquery遍历select元素(实例讲解)
Dec 31 Javascript
JavaScript声明变量时为什么要加var关键字
Sep 29 Javascript
Bootstrap栅格系统简单实现代码
Mar 06 Javascript
详解webpack 多页面/入口支持&公共组件单独打包
Jun 29 Javascript
JS时间控制实现动态效果的实例讲解
Jul 31 Javascript
jQuery中each循环的跳出和结束实例
Aug 16 jQuery
seajs实现强制刷新本地缓存的方法分析
Oct 16 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
Feb 23 Javascript
vue.js给动态绑定的radio列表做批量编辑的方法
Feb 28 Javascript
JS实现页面鼠标点击出现图片特效
Aug 19 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
程序员编程十条戒律
2009/07/09 PHP
php UTF8 文件的签名问题
2009/10/30 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
2015/04/08 PHP
PHP中PDO事务处理操作示例
2018/05/02 PHP
javascript编程起步(第三课)
2007/02/27 Javascript
读jQuery之七 判断点击了鼠标哪个键的代码
2011/06/21 Javascript
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
Javascript倒计时页面跳转实例小结
2013/09/11 Javascript
javascript中String对象的slice()方法分析
2014/12/20 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
js获取iframe中的window对象的实现方法
2016/05/20 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
Angular4编程之表单响应功能示例
2017/12/13 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
js canvas实现写字动画效果
2018/11/30 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
2019/11/09 Javascript
jQuery实现可编辑的表格
2019/12/11 jQuery
echarts实现获取datazoom的起始值(包括x轴和y轴)
2020/07/20 Javascript
python爬虫基本知识
2018/03/05 Python
python如何创建TCP服务端和客户端
2018/08/26 Python
python 实现简单的FTP程序
2019/12/27 Python
使用Python+selenium实现第一个自动化测试脚本
2020/03/17 Python
利用pandas向一个csv文件追加写入数据的实现示例
2020/04/23 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
CSS3实现网站商品展示效果图
2020/01/18 HTML / CSS
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
方太官方网上商城:销售方太抽油烟机、燃气灶、消毒柜等
2017/01/17 全球购物
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
教师政风行风评议心得体会
2014/10/21 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书
2016年综治宣传月活动宣传标语口号
2016/03/16 职场文书
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
2021/04/12 Python