如何在JavaScript对象中嵌入私有成员
14页1、 最近,我开发一个项目Angular Cloud Data Connector, 帮助Angular开发者使用云数据,特别是Azure移动服务, 使用WEB标准,像索引数据库(indexed DB)。我尝试建立一种方式,使得JavaScript开发者能将私有成员嵌入到一个对象中。我解决这个问题的技术用到了我命名的闭包空间(closure space)。在这篇入门文章中,我要分享的是如何在你的项目中用它,及它对主流浏览器的性能和内存的影响。在深入学习前,咱们先说下,你为什么需要用到私有成员(private members), 还有一种替代方式来模拟私有成员。1. 为何要用私有成员(Private Members)当你用JavaScript 创建一个对象时,可以声明值成员(value members)。 如果你打算控制对它们的读/写访问操作,可以如下声明:varentity=;entity._property=helloworld;Object.defineProperty(entity,property,get:function()returnthis._property;,set:fu
2、nction(value)this._property=value;,enumerable:true,configurable:true);这样实现,你能完全控制读和写操作。问题在于_property 成员仍然可以直接访问和修改。这也就是为何我们需要更加稳定可靠的方式,声明私有成员,它智能通过对象的方法来访问。2. 使用闭包空间(Closure Space)解决方法是使用闭包空间。每当内部函数 (inner fanction) 访问来自外部函数作用域的变量时,浏览器为你分配一段内存空间。有时很取巧,不过就我们的题目来讲,这算是一个完美的解决方案。我们在上个代码版本中添加这个特性:varcreateProperty=function(obj,prop,currentValue)Object.defineProperty(obj,prop,get:function()returncurrentValue;,set:function(value)currentValue=value;,enumerable:true,configurable:true);varentity=;varmyVar
3、=helloworld;createProperty(entity,property,myVar);示例中,createProperty 函数有一个 currentValue 变量,存在 get 和 set 方法。此变量会保存到 get 和 set 函数的闭包空间中。现在,只有这两个函数能看到和更新currentValue 变量! 任务完成!唯一需要警惕 caveat,警告,注意)的是源值 (myVar) 仍可访问。下面给出另一个更健壮的版本(保护 myVar 变量):varcreateProperty=function(obj,prop)varcurrentValue=objprop;Object.defineProperty(obj,prop,get:function()returncurrentValue;,set:function(value)currentValue=value;,enumerable:true,configurable:true);varentity=property:helloworld;createProperty(entity,property);采用
《如何在JavaScript对象中嵌入私有成员》由会员桔****分享,可在线阅读,更多相关《如何在JavaScript对象中嵌入私有成员》请在金锄头文库上搜索。
软件需求调研报告
善待自己关爱他人
曲柄压力机的正确使用与维护
江苏省东台市三校七年级语文第一次阶段性测试试题
图像压缩(JPEG)编码算法及压缩过程的实现
干部考评工作问题调研汇报
大学美育论文
周施工进度计划表
小学班主任教育故事演讲稿
2022年甘肃省安全员C证考试历年真题汇总含答案参考19
压花机 片皮机项目资金申请报告模板
呼和浩特大青山登山健步道
农业观光旅游项目可行性研究报告立项申请写作范本
中学生劳动节趣事的优秀日记三百字
南开大学21秋《营运资本管理》在线作业三答案参考44
精选初一写景作文300字集锦8篇
评标专家工作纪律
小学教师校本培训总结范文(3篇).doc
深圳考察汇报对深圳和佛山市场的考察汇报
高三化学第一轮高考复习知识大全
2023-03-14 44页
2023-03-21 4页
2023-01-26 43页
2022-12-27 13页
2022-09-12 3页
2023-06-20 31页
2023-01-30 3页
2023-09-29 2页
2024-01-14 12页
2024-01-19 25页