如何在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 相关文章推荐
JS实现根据当前文字选择返回被选中的文字
May 21 Javascript
js控制鼠标事件移动及移出效果显示
Oct 19 Javascript
jquery带下拉菜单和焦点图代码分享
Aug 24 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
Oct 05 Javascript
jQuery中的deferred对象和extend方法详解
May 08 jQuery
JavaScript上传文件时不用刷新页面方法总结(推荐)
Aug 15 Javascript
React Native 使用Fetch发送网络请求的示例代码
Dec 02 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
Nov 29 Javascript
深入Node TCP模块的理解
Mar 13 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
Apr 02 Javascript
Vue 实现前进刷新后退不刷新的效果
Jun 14 Javascript
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
Apr 11 Vue.js
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
全文搜索和替换
2006/10/09 PHP
PHP+Mysql+jQuery实现动态展示信息
2011/10/08 PHP
php中执行系统命令的方法
2015/03/21 PHP
浅谈php fopen下载远程文件的函数
2016/11/18 PHP
深入浅析PHP的session反序列化漏洞问题
2017/06/15 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
js关闭浏览器窗口及检查浏览器关闭事件
2013/09/03 Javascript
javascript禁用Tab键脚本实例
2013/11/22 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
jQuery点缩略图弹出层显示大图片
2015/02/13 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
2017/03/24 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
利用Decorator如何控制Koa路由详解
2018/06/26 Javascript
javascript中floor使用方法总结
2019/02/02 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
基于python-pptx库中文文档及使用详解
2020/02/14 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
python中绕过反爬虫的方法总结
2020/11/25 Python
佛罗里达州印第安河新鲜水果:Hale Groves
2017/02/20 全球购物
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
COSETTE官网:奢华,每天
2020/03/22 全球购物
个性大学生自我评价
2013/12/04 职场文书
大一军训感言
2014/01/09 职场文书
八一演出活动方案
2014/02/03 职场文书
乡镇消防工作实施方案
2014/03/27 职场文书
补充协议书范本
2014/04/23 职场文书
入党综合考察材料
2014/06/02 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
2015年社区纪检工作总结
2015/04/21 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python
table设置超出部分隐藏,鼠标移上去显示全部内容的方法
2022/12/24 HTML / CSS