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数组处理多个字符串的连接问题
Aug 20 Javascript
Jquery实现页面加载时弹出对话框代码
Apr 19 Javascript
了解了这些才能开始发挥jQuery的威力
Oct 10 Javascript
Node.js中安全调用系统命令的方法(避免注入安全漏洞)
Dec 05 Javascript
Javascript实现获取及设置光标位置的方法
Jul 21 Javascript
JS实现超简单的鼠标拖动效果
Nov 02 Javascript
js采用concat和sort将N个数组拼接起来的方法
Jan 21 Javascript
浅谈JavaScript中小数和大整数的精度丢失
May 31 Javascript
分享jQuery网页元素拖拽插件
Dec 01 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
Jan 08 Javascript
Vue如何实现组件的源码解析
Jun 08 Javascript
JS+CSS实现炫酷光感效果
Sep 05 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之第八天
2006/10/09 PHP
php 文件状态缓存带来的问题
2008/12/14 PHP
php 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
PHP文件上传主要代码讲解
2013/09/30 PHP
php实现爬取和分析知乎用户数据
2016/01/26 PHP
PHP使用socket发送HTTP请求的方法
2016/02/14 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
使用jQuery UI的tooltip函数修饰title属性的气泡悬浮框
2013/06/24 Javascript
详解JavaScript中getFullYear()方法的使用
2015/06/10 Javascript
Google 地图控件集详解及实例代码
2016/08/06 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
2017/06/12 jQuery
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
Angular2 父子组件通信方式的示例
2018/01/29 Javascript
vue2.0 axios跨域并渲染的问题解决方法
2018/03/08 Javascript
Vue2 监听属性改变watch的实例代码
2018/08/27 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
[42:32]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
[01:39:04]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第二场 2月1日
2021/03/11 DOTA
Python有序字典简单实现方法示例
2017/09/28 Python
Python进程间通信之共享内存详解
2017/10/30 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
python实现桌面托盘气泡提示
2019/07/29 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
2019/12/13 Python
Python递归函数特点及原理解析
2020/03/04 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
Python ORM框架Peewee用法详解
2020/04/29 Python
matplotlib绘制多子图共享鼠标光标的方法示例
2021/01/08 Python
施华洛世奇天猫官方旗舰店:SWAROVSKI
2017/04/17 全球购物
Nebula美国官网:便携式投影仪
2019/03/15 全球购物
企业管理毕业生求职信范文
2014/03/07 职场文书
《长江之歌》教学反思
2014/04/17 职场文书
琅琊山导游词
2015/02/05 职场文书
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python
代码复现python目标检测yolo3详解预测
2022/05/06 Python
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js