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 相关文章推荐
date.parse在IE和FF中的区别
Jul 29 Javascript
自己做的模拟模态对话框实现代码
May 23 Javascript
document.getElementById获取控件对象为空的解决方法
Nov 20 Javascript
js实现iframe跨页面调用函数的方法
Dec 13 Javascript
JavaScript实现同步于本地时间的动态时间显示方法
Feb 02 Javascript
JavaScript对象数组排序实例方法浅析
Jun 15 Javascript
浅谈javascript中的加减时间
Jul 12 Javascript
jQuery使用deferreds串行多个ajax请求
Aug 22 Javascript
Bootstrap基本组件学习笔记之分页(12)
Dec 08 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
Dec 12 Javascript
详解Angular中通过$location获取地址栏的参数
Aug 02 Javascript
微信小程序(订阅消息)功能
Oct 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
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
2014/06/23 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
laravel实现按时间日期进行分组统计方法示例
2019/03/23 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
新发现一个骗链接的方法(js读取cookies)
2012/01/11 Javascript
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
javascript函数式编程实例分析
2015/04/25 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
浅谈JS封闭函数、闭包、内置对象
2017/07/18 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
webpack3之loader全解析
2017/10/26 Javascript
ES6入门教程之Array.from()方法
2019/03/23 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
js实现浏览器打印功能的示例代码
2020/07/15 Javascript
vue3.0实现点击切换验证码(组件)及校验
2020/11/18 Vue.js
终端命令查看TensorFlow版本号及路径的方法
2018/06/13 Python
Sanic框架请求与响应实例分析
2018/07/16 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
Django用户登录与注册系统的实现示例
2020/06/03 Python
CSS3地图动态实例代码(圆圈向外扩散)
2018/06/15 HTML / CSS
使用CSS3来匹配横屏竖屏的简单方法
2015/08/04 HTML / CSS
CSS3实现苹果手机解锁的字体闪亮效果示例
2021/01/05 HTML / CSS
写出程序把一个链表中的接点顺序倒排
2014/04/28 面试题
编辑找工作求职信范文
2013/12/16 职场文书
财务部副经理岗位职责
2014/03/14 职场文书
古汉语文学求职信范文
2014/03/16 职场文书
自主招生教师推荐信
2014/05/10 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
MySQL 分区表中分区键为什么必须是主键的一部分
2022/03/17 MySQL