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 相关文章推荐
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
Mar 03 Javascript
你必须知道的Javascript知识点之"单线程事件驱动"的使用
Apr 23 Javascript
在Linux上用forever实现Node.js项目自启动
Jul 09 Javascript
学习JavaScript设计模式(代理模式)
Dec 03 Javascript
js运动应用实例解析
Dec 28 Javascript
在Html中使用Requirejs进行模块化开发实例详解
Apr 15 Javascript
jQuery制作网页版选项卡
Jul 28 Javascript
微信小程序 wx.request(object) API详解及实例代码
Sep 30 Javascript
详解在 Angular 项目中添加 clean-blog 模板
Jul 04 Javascript
浅谈通过JS拦截 pushState和replaceState事件
Jul 21 Javascript
vue弹窗插件实战代码
Sep 08 Javascript
js实现简单进度条效果
Mar 25 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实现提取一个图像文件并在浏览器上显示的代码
2012/10/06 PHP
php实现购物车功能(以大苹果购物网为例)
2017/03/09 PHP
PHP数组常用函数实例小结
2018/08/20 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
Apache站点配置SSL强制跳转443
2021/03/09 Servers
javascript之锁定表格栏位
2007/06/29 Javascript
javascript 复杂的嵌套环境中输出单引号和双引号
2009/05/26 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
js实现连个数字相加而不是拼接的方法
2014/02/23 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
利用JavaScript阻止表单提交的两种方法
2016/08/11 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
常用原生js自定义函数总结
2016/11/20 Javascript
如何解决hover在ie6中的兼容性问题
2016/12/15 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
[59:15]EG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/29 DOTA
python3.5仿微软计算器程序
2020/03/30 Python
python 截取 取出一部分的字符串方法
2017/03/01 Python
Python自动抢红包教程详解
2019/06/11 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
2019/09/18 Python
Python+OpenCV实现图像的全景拼接
2020/03/05 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
python tqdm实现进度条的示例代码
2020/11/10 Python
求职简历自荐信
2013/10/20 职场文书
出纳岗位职责
2013/11/09 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
答谢酒会主持词
2015/07/02 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书
高中生物教学反思
2016/02/20 职场文书
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android