Javascript 作用域使用说明


Posted in Javascript onAugust 13, 2009

公用、受保护和私有作用域

在传统的面向对象程序设计中,主要关注于公用和私有作用域。公用作用域中的对象属性可以从对象外部访问,即开发者创建对象的实例后,就可使用它的公用属性。而私有作用域中的属性只能在对象内部访问,即对于外部世界来说,这些属性并不存在。这也意味着如果类定义了私有属性和方法,则它的子类也不能访问这些属性和方法。

最近,另一种作用域流行起来,即受保护作用域。虽然在不同语言中,受保护作用域的应用的规则不同,但一般说来,它都用于定义私有的属性和方法,只是这些属性和方法还能被其子类访问。

对ECMAScript讨论这些作用域几乎毫无意义,因为ECMAScript中只存在一种作用域——公用作用域。ECMAScript中的所有对象的所有属性和方法都是公用的。因此,定义自己的类和对象时,必须格外小心。记住,所有属性和方法默认都是公用的。

许多开发者都在网上提出了有效的属性作用域模式,解决了ECMAScript的这种问题。由于缺少私有作用域,开发者们制定了一个规约,说明哪些属性和方法应该被看作私有的。这种规约规定在属性名前后加下划线。例如:

Javascript 作用域使用说明

这段代码中,属性color是私有的。记住,这些下划线并不改变这些属性是公用属性的事实,它只是告诉其他开发者,应该把该属性看作私有的。

有些开发者还喜欢用单下划线说明私有成员,例如obj._color。

静态作用域并非静态的

静态作用域定义的属性和方法任何时候都能从同一个位置访问。在Java中,类可具有静态属性和方法,无需实例化该类的对象,即可访问这些属性和方法,例如java.net.URLEncoder类,它的函数encode()即是静态方法。

严格说来,ECMAScript并没有静态作用域。不过,它可以给构造函数提供属性和方法。还记得吗,构造函数只是函数。函数是对象,对象可以有属性和方法。例如:

Javascript 作用域使用说明Javascript 作用域使用说明

Javascript 作用域使用说明

这里,方法alternate()实际上是函数sayHi的方法。可以像调用常规函数一样调用sayHi()输出"hi",也可以调用sayHi.alternate()输出"hola"。即使如此,alternate()也是sayHi()公用作用域中的方法,而不是静态方法。

Javascript 相关文章推荐
js利用Array.splice实现Array的insert/remove
Jan 13 Javascript
遍历jquery对象的代码分享
Nov 02 Javascript
使用text方法获取Html元素文本信息示例
Sep 01 Javascript
jquery+easeing实现仿flash的载入动画
Mar 10 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
May 30 Javascript
jQuery Ajax 上传文件处理方式介绍(推荐)
Jun 30 Javascript
Bootstrap 最常用的JS插件系列总结(图片轮播、标签切换等)
Jul 14 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
Sep 07 Javascript
vue-router路由与页面间导航实例解析
Nov 07 Javascript
微信小程序解析富文本过程详解
Jul 13 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
Oct 28 Javascript
聊聊JS ES6中的解构
Apr 29 Javascript
Javascript 继承机制实例
Aug 12 #Javascript
Javascript 继承机制的实现
Aug 12 #Javascript
Javascript 继承实现例子
Aug 12 #Javascript
JQuery jsonp 使用示例代码
Aug 12 #Javascript
JavaScript 权威指南(第四版) 读书笔记
Aug 11 #Javascript
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
Aug 09 #Javascript
javascript 当前日期加(天、周、月、年)
Aug 09 #Javascript
You might like
php fsockopen解决办法 php实现多线程
2014/01/20 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
php实现计算百度地图坐标之间距离的方法
2016/05/05 PHP
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解
2015/03/05 Javascript
JS重载实现方法分析
2016/12/16 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
JavaScript中toLocaleString()和toString()的区别实例分析
2018/08/14 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
2019/04/30 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
如何利用node转发请求详解
2020/09/17 Javascript
[01:02:46]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
Python网络爬虫项目:内容提取器的定义
2016/10/25 Python
PyQt5重写QComboBox的鼠标点击事件方法
2019/06/25 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
python正则-re的用法详解
2019/07/28 Python
使用python实现回文数的四种方法小结
2019/11/24 Python
python实现飞机大战项目
2020/03/11 Python
keras中epoch,batch,loss,val_loss用法说明
2020/07/02 Python
Skyscanner台湾:全球知名的旅行比价引擎
2018/07/01 全球购物
手工制作的豪华英式沙发和沙发床:Willow & Hall
2019/05/03 全球购物
双立人加拿大官网:Zwilling加拿大
2020/08/10 全球购物
易程科技软件测试笔试
2013/03/24 面试题
租房协议书范本
2014/04/09 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
四风剖析查摆对照检查材料思想汇报
2014/09/24 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
2016应届毕业生实习评语
2015/12/01 职场文书
2016党员干部反腐倡廉心得体会
2016/01/13 职场文书
python缺失值的解决方法总结
2021/06/09 Python
Apache SeaTunnel实现 非CDC数据抽取
2022/05/20 Servers