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加ASP二级域名转向的代码
May 17 Javascript
jquery 全局AJAX事件使用代码
Nov 05 Javascript
基于jQuery的message插件实现右下角弹出消息框
Jan 11 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
Feb 08 Javascript
Linux下使用jq友好的打印JSON技巧分享
Nov 18 Javascript
jquery popupDialog 使用 加载jsp页面的方法
Oct 25 Javascript
jQuery图片切换动画效果
Feb 28 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
Apr 07 Javascript
js调用刷新界面的几种方式
May 03 Javascript
Vue.js devtool插件安装后无法使用的解决办法
Nov 27 Javascript
jQuery插件jsonview展示json数据
May 26 jQuery
vue-router实现嵌套路由的讲解
Jan 19 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
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
2010/02/08 PHP
PHP读书笔记整理_结构语句详解
2016/07/01 PHP
PHP抓取远程图片(含不带后缀的)教程详解
2016/10/21 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
如何判断图片地址是否失效
2007/02/02 Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
清除div下面的所有标签的方法
2014/02/17 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
Jquery 获取指定标签的对象及属性的设置与移除
2014/05/29 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
2015/06/05 Javascript
详解JavaScript中的Unescape()和String() 函数
2015/11/09 Javascript
前端微信支付js代码
2016/07/25 Javascript
Vue.js展示AJAX数据简单示例讲解
2017/03/29 Javascript
使用Bootrap和Vue实现仿百度搜索功能
2017/10/26 Javascript
animate.css在vue项目中的使用教程
2018/08/05 Javascript
从vue源码看props的用法
2019/01/09 Javascript
JS前端知识点总结之内置对象,日期对象和定时器相关操作
2019/07/05 Javascript
vue通过数据过滤实现表格合并
2020/11/30 Javascript
JavaScript生成随机验证码代码实例
2019/09/28 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
详细分析JavaScript中的深浅拷贝
2020/09/17 Javascript
[09:59]DOTA2-DPC中国联赛2月7日Recap集锦
2021/03/11 DOTA
Python中列表元素转为数字的方法分析
2016/06/14 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
pytorch GAN生成对抗网络实例
2020/01/10 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
2016/12/22 HTML / CSS
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
高中生旷课检讨书
2014/10/08 职场文书
专题组织生活会发言材料
2014/10/17 职场文书
Python常遇到的错误和异常
2021/11/02 Python