JavaScript 私有成员实现

到此为止,如果您任然对 JavaScript 面向对象持怀疑态度,那么这个怀疑一定是,JavaScript 没有实现面向对象中的信息隐藏,即私有和公有。与其他类式面向对象那样显式地声明私有公有成员的方式不同,JavaScript 的信息隐藏就是靠闭包实现的。见 程序清单 7:

清单 7. 使用闭包实现信息隐藏
 // 声明 User 构造器
function User( pwd ) {
// 定义私有属性
var password = pwd;
// 定义私有方法
function getPassword() {
// 返回了闭包中的 password
return password;
}
// 特权函数声明,用于该对象其他公有方法能通过该特权方法访问到私有成员
this.passwordService = function() {
return getPassword();
}
}
// 公有成员声明
User.prototype.checkPassword = function( pwd ) {
return this.passwordService() === pwd;
};
// 验证隐藏性
var u = new User( "123456" );
// 打印 true
console.log( u.checkPassword( "123456" ) );
// 打印 undefined
console.log( u.password );
// 打印 true
console.log( typeof u.gePassword === "undefined" );

JavaScript 必须依赖闭包实现信息隐藏,是由其函数式语言特性所决定的。本文不会对函数式语言和闭包这两个话题展开讨论,正如上文默认您理解 JavaScript 中基于上下文的 this 一样。关于 JavaScript 中实现信息隐藏,Douglas Crockford在《 Private members in JavaScript 》(参考资源)一文中有更权威和详细的介绍。

引:https://www.ibm.com/developerworks/cn/web/1304_zengyz_jsoo/

推荐:tuhttp://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html

最新文章

  1. 基于cocoStudio的UIListView的可以左右滑动翻页的ListView
  2. java中|与||,&与&&到底有什么区别呢?
  3. Python之路-字符编码&数据类型补充
  4. 201521123042 《Java程序设计》第6周学习总结
  5. JSON、JSONP、Ajax的区别
  6. CSS之clearfix清除浮动
  7. Golang微服务:万精油NATS在Micro中的应用
  8. Firebird Embedded 部署的一个坑
  9. Ubuntu解压
  10. 基于 Confluence 6 数据中心的 SAML 单点登录设置你的身份提供者
  11. set get del
  12. python 分类
  13. .NET 常用ORM之SubSonic
  14. flask——包含,继承,宏
  15. instanceof与constructor的区别
  16. python基础一数据类型之集合
  17. CDH上Cloudera Management Service 各个角色迁移至其他节点
  18. C# 获取文件图标
  19. Python Django 之 MVT
  20. 在 Azure 中的 Linux 虚拟机上使用 SSL 证书保护 Web 服务器

热门文章

  1. 配置点云库PCL时遇到的问题
  2. VES Hand Book Contents
  3. not子查询中有null值的时候 not in 会失效
  4. JS 继承总结
  5. 每天一个 Linux 命令(15):tail 命令
  6. 安装完CentOS 7 后必做的七件事
  7. eclipse项目debug方法
  8. mac 10.9 安装 gevent
  9. sqlmap用户手册
  10. 通过WMI接口监控服务器性能