位置: 编程技术 - 正文

面向对象的Javascript之三(封装和信息隐藏)(面向对象的三大特征)

编辑:rootadmin
同时,我们知道在面向对象的高级语言中,创建包含私有成员的对象是最基本的特性之一,提供属性和方法对私有成员进行访问来隐藏内部的细节。虽然JS也是面向对象的,但没有内部机制可以直接表明一个成员是公有还是私有的。还是那句话,依靠JS的语言灵活性,我们可以创建公共、私有和特权成员,信息隐藏是我们要实现的目标,而封装是我们实现这个目标的方法。我们还是从一个示例来说明:创建一个类来存储图书数据,并实现可以在网页中显示这些数据。 1. 最简单的是完全暴露对象。使用构造函数创建一个类,其中所有的属性和方法在外部都是可以访问的。 display方法依赖于isbn是否正确,如果不是你将无法获取图像以及链接。考虑到这点,每本图书isbn必须存在的,而图书的标题和作者是可选的。表面上看只要指定一个isbn参数似乎就能正常运行。但却不能保证isbn的完整性,基于此我们加入isbn的验证,使图书的检查更加健壮。 我们添加了checkIsbn()来验证ISBN的有效性,确保display()可以正常运行。但是需求有变化了,每本书可能有多个版本,意味着同一本可能有多个ISBN号存在,需要维护单独的选择版本的算法来控制。同时尽管能检查数据的完整性,但却无法控制外部对内部成员的访问(如对isbn,title,author赋值),就谈不上保护内部数据了。我们继续改进这个方案,采用接口实现(提供get访问器/set存储器)。 现在就可以通过接口Publication来与外界进行通信。赋值方法也在构造器内部完成,不需要实现两次同样的验证,看似非常完美的完全暴露对象方案了。虽然能通过set存储器来设置属性,但这些属性仍然是公有的,可以直接赋值。但此方案到此已经无能为力了,我会在第二种信息隐藏解决方案中来优化。尽管如此,此方案对于那些没有深刻理解作用域的新手非常容易上手。唯一的不足是不能保护内部数据且存储器增加了多余的不必要代码。 2. 使用命名规则的私有方法。就是使用下划线来标识私有成员,避免无意中对私有成员进行赋值,本质上与完全暴露对象是一样的。但这却避免了第一种方案无意对私有成员进行赋值操作,却依然不能避免有意对私有成员进行设置。只是说定义了一种命名规范,需要团队成员来遵守,不算是一种真正的内部信息隐藏的完美方案。 注意:除了isbn,title,author属性被加上"_"标识为私有成员外,checkIsbn()也被标识为私有方法。 3. 通过闭包来真正私有化成员。如果对闭包概念中的作用域和嵌套函数不熟悉的朋友,可以参考"面向对象的Javascript之一(初识Javascript)"文章,这里不再详细论述。 这种方案与上一种有哪些不同呢?首先,在构造器中使用var来声明三个私有成员,同样也声明了私有方法checkIsbn(),仅仅在构造器中有效。使用this关键字声明特权方法,即声明在构造器内部但却可以访问私有成员。任何不需要访问私有成员的方法都在Book.prototype中声明(如:display),也即是将需要访问私有成员的方法声明为特权方法是解决这个问题的关键。但此访问也有一定缺陷,如对每一个实例而言,都要创建一份特权方法的副本,势必需要更多内存。我们继续优化,采用静态成员来解决所面临的问题。顺便提一句:静态成员仅仅属于类,所有的对象仅共用一份副本(在"面向对象的Javascript之二(实现接口)中有说明,参见Interface.ensureImplements方法"),而实例方法是针对对象而言。 这种方案与上种相似,使用var和this来创建私有成员和特权方法。不同之处在于使用闭包来返回构造器,并将checkIsbn声明为私有静态方法。可能有人会问,我为什么要创建私有静态方法,答案在于使所有对象公用一份函数副本而已。我们这里创建的个实例都只有一个方法副本checkIsbn,且属于类Book。根据需要,你也可以创建公有的静态方法供外部调用(如:convertToTitle)。这里我们继续考虑一个问题,假设以后我们需要对不同的书做限制,比如<<Javascript高级编程>>最大印发量为,<<.NET>>最大印发量为,也即说需要一个最大印发量的常量。思考一下,利用已有的知识,我们如何声明一个常量呢?其实不难,我们想想,可以利用一个只有访问器的私有特权方法就可以实现。 最完美的情况就是你所封装的程序对调用者而言,仅仅需要知道你的接口就可以,根本不关心你如何实现。但问题在于,随着工程量的扩大,你的封装内容必然会增大,在项目发生交接时,对于一个对作用域和闭包等概念不熟悉的成员来说,维护难度会变得如此之大。有些时候应需求响应必须改动源码(这里不一定指改接口),可能是新增一些细节,即使拿到你的源码却无从下手,那就不好做了。因此,我的建议:封装不要过度,接口一定要清晰,可扩展。

推荐整理分享面向对象的Javascript之三(封装和信息隐藏)(面向对象的三大特征),希望有所帮助,仅作参考,欢迎阅读内容。

面向对象的Javascript之三(封装和信息隐藏)(面向对象的三大特征)

文章相关热门搜索词:面向对象的java语言,面向对象的三大特征,面向对象的程序设计语言是一种,面向对象的程序设计语言是,面向对象的程序设计语言是,面向对象的程序设计语言是,面向对象的java,面向对象的java,内容如对您有帮助,希望把文章链接给更多的朋友!

Javascript面向对象编程 Javascript的重要性使用率1、在web应用中,涉及到前端界面编程基本上都要用到javascript语言;2、Web2.0及Ajax推动了javascript语言。3、随着大量的c/s应用转向b

Javascript 面向对象编程(coolshell) 这两天有个前同事总在问我Javascript面向对象的东西,所以,索性写篇文章让他看去吧,这里这篇文章主要想从一个整体的角度来说明一下Javascript的面

再谈javascript面向对象编程 另外这篇文章是一篇入门文章,我也是才开始学习Javascript,有一点心得,才想写一篇这样文章,文章中难免有错误的地方,还请各位不吝吐槽指正吐槽J

标签: 面向对象的三大特征

本文链接地址:https://www.jiuchutong.com/biancheng/385672.html 转载请保留说明!

上一篇:面向对象的Javascript之二(接口实现介绍)(面向对象的程序设计语言是)

下一篇:Javascript面向对象编程(javascript面向对象精要pdf下载)

  • 公司食堂菜金会计分录
  • 签合同前的费用由谁承担
  • 申报个税的收入是什么收入
  • 行政单位支出科目中组织事务是什么
  • 支付职工医药费计入什么科目
  • 固定资产累计折旧借贷方向
  • 运输费计入采购成本的分录
  • 一般纳税人辅导期
  • 建筑劳务公司派遣人员工资发放凭证
  • 如何少交点税
  • 延迟抵扣的税务风险
  • 中药税率什么时候变为9
  • 收汇结汇的账务处理
  • 增值税减免税申报明细表免税代码和名称
  • 哪些外籍个人应在中国缴纳个税?
  • 资产减值损失如何结转本年利润
  • 企业会计准则制度
  • 什么是冻结账户的情形
  • 以银行存款支付上述材料运费480元
  • 微信公众号开发php源码
  • 销售收入的暂估入账
  • 分配辅助生产成本时可能借记的科目有
  • 房屋装修补偿款 避税
  • wordpress使用
  • 公司给员工发放的福利都要扣个税吗
  • 质量事故责任书
  • 间接人工费用预算工时分配率将提高10%
  • 展开双翅的绯红之花
  • form表单参数传递
  • 微信php开发教程
  • 无形资产的处置方式
  • c语言内嵌汇编
  • 医疗机构收据
  • 其他收益在报表列示的项目是
  • 贴现金额的会计分录
  • 企业计提坏账准备时应该借记什么科目
  • 房租没发票怎么入账
  • 编制记账凭证的步骤
  • 购买理财产品如何防诈骗
  • 劳务分包预缴税款计算公式
  • 生产企业出口退税政策
  • 存货计提存货跌价准备
  • 公益性捐赠全额扣除,企业所得税
  • 代开发票预缴税款的比例是多少呢?
  • 收取履约保证金的作用
  • 独立核算和非独立核算增值税
  • 旅游费用如何记账科目
  • 保险可以税前扣除吗
  • 定额发票累计领取怎么算
  • 会计利润是利润加暂时性差异吗为什么
  • 京东卖家怎么开普通发票
  • sqlserver增删改查执行语句
  • sql连接两个表接查询sql语句
  • sql函数使用
  • Ubuntu下mysql与mysql workbench安装教程
  • 电脑windows不可用怎么办
  • win10正式版激活码
  • win7开机提示便签损坏
  • win10系统便签突然无法打开
  • win101909玩dnf怎么样
  • ubuntu命令行调节音量
  • win7如何创建新桌面
  • linux禁止root用户远程登录
  • 删除文件时出现错误是怎么回事
  • win10 自带
  • 怎样解决windows照片查看器无法显示此图片
  • win10一直重置
  • 简单谈谈对中国电信的认识
  • ExtJS扩展 垂直tabLayout实现代码
  • bat修改注册表数值
  • python int 转 float
  • 网页的子页面
  • js操作对象的方法
  • 开票信息不一致怎么回事
  • 怎么注册用户名短的淘宝账号
  • 成都税务二维码扫描
  • 股权转让查账重点查什么
  • 房子有注册公司可以卖吗
  • 增值税发票勾选操作流程
  • 中国进口车关税为什么那么贵
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设