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 中令人困惑的变量赋值
Aug 13 Javascript
定义select的边框颜色
Apr 28 Javascript
基于jquery的给文章加入关键字链接
Oct 26 Javascript
jQuery EasyUI Dialog拖不下来如何解决
Sep 28 Javascript
怎样判断jQuery当前元素是隐藏还是显示
Nov 23 Javascript
详解Angular 4 表单快速入门
Jun 05 Javascript
不到200行 JavaScript 代码实现富文本编辑器的方法
Jan 03 Javascript
详解在React里使用"Vuex"
Apr 02 Javascript
详解vue-loader在项目中是如何配置的
Jun 04 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
Apr 11 Javascript
通过jQuery学习js类型判断的技巧
May 27 jQuery
如何在selenium中使用js实现定位
Aug 18 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
PHP在XP下IIS和Apache2服务器上的安装
2006/09/05 PHP
php,ajax实现分页
2008/03/27 PHP
PHP 日常开发小技巧
2009/09/23 PHP
php和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
php使用curl模拟登录后采集页面的例子
2013/11/04 PHP
PHP常用正则表达式集锦
2014/08/17 PHP
thinkphp数据查询和遍历数组实例
2014/11/28 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
2018/05/24 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
Javascript----文件操作
2007/01/18 Javascript
html读出文本文件内容
2007/01/22 Javascript
轻松实现Bootstrap图片轮播
2020/04/20 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
实现隔行换色效果的两种方式【实用】
2016/11/27 Javascript
jQuery Masonry瀑布流插件使用方法详解
2017/01/18 Javascript
Vue-cli创建项目从单页面到多页面的方法
2017/09/20 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
jquery 插件重新绑定的处理方法分析
2019/11/23 jQuery
Python实现包含min函数的栈
2016/04/29 Python
python的mysqldb安装步骤详解
2017/08/14 Python
关于反爬虫的一些简单总结
2017/12/13 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
python找出完数的方法
2018/11/12 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
python3.6根据m3u8下载mp4视频
2019/06/17 Python
Pygame的程序开始示例代码
2020/05/07 Python
python实现代码审查自动回复消息
2021/02/01 Python
Styleonme中文网:韩国高档人气品牌
2017/06/21 全球购物
《散步》教学反思
2014/03/02 职场文书
小学英语教师先进事迹
2014/05/28 职场文书
领导班子个人对照检查剖析材料
2014/09/29 职场文书
七夕情人节问候语
2015/11/11 职场文书
如何拟写通知正文?
2019/04/02 职场文书
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python