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编程起步(第四课)
Jan 10 Javascript
JavaScript 基础篇之运算符、语句(二)
Apr 07 Javascript
js冒泡法和数组转换成字符串示例代码
Aug 14 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
Dec 31 Javascript
JS获取计算机mac地址以及IP的实现方法
Jan 08 Javascript
Javascript玩转继承(二)
May 08 Javascript
jQuery filter函数使用方法
May 19 Javascript
jQuery中 delegate使用的问题
Jul 03 Javascript
使用Node搭建reactSSR服务端渲染架构
Aug 30 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
Oct 19 Javascript
electron中使用bootstrap的示例代码
Nov 06 Javascript
JavaScript实现公告栏上下滚动效果
Mar 13 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
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
php 分页函数multi() discuz
2009/06/21 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
2015/01/28 PHP
PHP Hash算法:Times33算法代码实例
2015/05/13 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
2016/09/11 PHP
javascript 支持ie和firefox杰奇翻页函数
2008/07/22 Javascript
JavaScript 原型学习总结
2010/10/29 Javascript
一个CSS+jQuery实现的放大缩小动画效果
2014/02/19 Javascript
Javascript表单验证要注意的事项
2014/09/29 Javascript
基于js与flash实现的网站flv视频播放插件代码
2014/10/14 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
JavaScript中this的四个绑定规则总结
2016/09/26 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
用原生JS实现简单的多选框功能
2017/06/12 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
python实现指定字符串补全空格的方法
2015/04/30 Python
对Python的Django框架中的项目进行单元测试的方法
2016/04/11 Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
2017/06/16 Python
python 删除大文件中的某一行(最有效率的方法)
2017/08/19 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
python数据处理 根据颜色对图片进行分类的方法
2018/12/08 Python
Python 脚本拉取 Docker 镜像问题
2019/11/10 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
法定代表人授权委托书
2014/04/04 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
大学生入党积极分子党校学习思想汇报
2014/10/25 职场文书
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
怎样写辞职信
2015/02/27 职场文书
2019大学生实习报告
2019/06/21 职场文书
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS