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 相关文章推荐
解决AJAX中跨域访问出现'没有权限'的错误
Aug 20 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
Jan 06 Javascript
JS中的构造函数详细解析
Mar 10 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
Dec 31 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
Jun 14 Javascript
JavaScript判断DIV内容是否为空的方法
Jan 29 Javascript
url传递的参数值中包含&时,url自动截断问题的解决方法
Aug 02 Javascript
JavaScript 中 avalon绑定属性总结
Oct 19 Javascript
vue-cli单页应用改成多页应用配置详解
Jul 14 Javascript
微信小程序实现轮播图效果
Sep 07 Javascript
vue.js做一个简单的编辑菜谱功能
May 08 Javascript
js input输入百分号保存数据库失败的解决方法
May 26 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
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
2006/12/06 PHP
php 数组元素快速去重
2017/05/05 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
Yii Framework框架使用PHPExcel组件的方法示例
2019/07/24 PHP
翻译整理的jQuery使用查询手册
2007/03/07 Javascript
javascript AutoScroller 函数类
2009/05/29 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
2015/03/02 Javascript
jQuery+PHP星级评分实现方法
2015/10/02 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
JS设置手机验证码60s等待实现代码
2017/06/14 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
详解react-native WebView 返回处理(非回调方法可解决)
2018/02/27 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
2018/03/09 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
vue工程全局设置ajax的等待动效的方法
2019/02/22 Javascript
详解如何在Vue项目中导出Excel
2019/04/19 Javascript
React传值 组件传值 之间的关系详解
2019/08/26 Javascript
Python json模块使用实例
2015/04/11 Python
python使用Tkinter显示网络图片的方法
2015/04/24 Python
Python简单计算文件夹大小的方法
2015/07/14 Python
Python使用Pickle库实现读写序列操作示例
2018/06/15 Python
python实现词法分析器
2019/01/31 Python
Python利用sqlacodegen自动生成ORM实体类示例
2019/06/04 Python
Django项目主urls导入应用中views的红线问题解决
2019/08/10 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
全网最全python库selenium自动化使用详细教程
2021/01/12 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
马来西亚和新加坡巴士票在线预订:CatchThatBus
2018/11/17 全球购物
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
第二批党的群众路线教育实践活动总结报告
2014/10/30 职场文书
JS的深浅复制详细
2021/10/16 Javascript
什么是Python装饰器?如何定义和使用?
2022/04/11 Python
docker 制作mysql镜像并自动安装
2022/05/20 Servers
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android