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对话框使用方法(警告框 javascript确认框 提示框)
Jan 07 Javascript
jQuery中prevAll()方法用法实例
Jan 08 Javascript
js分页工具实例
Jan 28 Javascript
浅谈document.write()输出样式
May 07 Javascript
javascript日期比较方法实例分析
Jun 17 Javascript
zTree节点文字过多的处理方法
Nov 24 Javascript
express如何使用session与cookie的方法
Jan 30 Javascript
浅谈React Event实现原理
Sep 20 Javascript
如何能分清npm cnpm npx nvm
Jan 17 Javascript
JavaScript+HTML5 canvas实现放大镜效果完整示例
May 15 Javascript
解决layer弹出层的内容页点击按钮跳转到新的页面问题
Sep 14 Javascript
Vue 实例中使用$refs的注意事项
Jan 29 Vue.js
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
为什么夜间收到的中波电台比白天多
2021/03/01 无线电
phpmyadmin 访问被拒绝的真实原因
2009/06/15 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
2013/06/21 PHP
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
JavaScript 嵌套函数指向this对象错误的解决方法
2010/03/15 Javascript
16个最流行的JavaScript框架[推荐]
2011/05/29 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
固定背景实现的背景滚动特效示例分享
2013/05/19 Javascript
JS 去前后空格大全(IE9亲测)
2013/07/15 Javascript
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
jQuery遍历Form示例代码
2013/09/03 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
实例浅析js的this
2016/12/11 Javascript
JavaScript利用Date实现简单的倒计时实例
2017/01/12 Javascript
js实现城市级联菜单的2种方法
2017/06/23 Javascript
jQuery remove()过滤被删除的元素(推荐)
2017/07/18 jQuery
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
分享ES6的7个实用技巧
2018/01/18 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
nvm、nrm、npm 安装和使用详解(小结)
2019/01/17 Javascript
js实现web调用摄像头 js截取视频画面
2019/04/21 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
2020/11/07 Javascript
对python的输出和输出格式详解
2018/12/08 Python
python中的句柄操作的方法示例
2019/06/20 Python
Python线程条件变量Condition原理解析
2020/01/20 Python
中外合拍动画首获奥斯卡提名,“上海出品”《飞奔去月球》能否拿下最终大奖?
2021/03/16 国漫
Android面试题及答案
2015/09/04 面试题
劳资协议书范本
2014/04/23 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
银行柜员与客户起冲突检讨书
2014/09/27 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书
社区干部培训心得体会
2016/01/06 职场文书
应用最多的公文《通知》如何写?
2019/04/02 职场文书
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技