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,超强推荐expand.js
Dec 23 Javascript
Javascript JSQL,SQL无处不在,
May 05 Javascript
node.js中的console.warn方法使用说明
Dec 09 Javascript
tuzhu_req.js 实现仿百度图片首页效果
Aug 11 Javascript
js实现点击获取验证码倒计时效果
Jan 28 Javascript
jquery实现表单验证简单实例演示
Nov 23 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
Mar 14 Javascript
JavaScript实现区块链
Mar 14 Javascript
JavaScript学习笔记之数组基本操作示例
Jan 09 Javascript
JS时间戳与日期格式互相转换的简单方法示例
Jan 30 Javascript
SpringBoot在yml配置文件中配置druid的操作
Nov 16 Javascript
用几道面试题来看JavaScript执行机制
Apr 30 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实现约瑟夫问题的方法小结
2015/03/23 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
慎用 somefunction.prototype 分析
2009/06/02 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
浅析JSONP技术原理及实现
2016/06/08 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
Web制作验证码功能实例代码
2017/06/19 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
vue3.0生命周期的示例代码
2020/09/24 Javascript
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
Python实现查找匹配项作处理后再替换回去的方法
2017/06/10 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
解决Python2.7中IDLE启动没有反应的问题
2018/11/30 Python
Python数据存储之 h5py详解
2019/12/26 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
2020/04/15 Python
python3读取autocad图形文件.py实例
2020/06/05 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
Scrapy 配置动态代理IP的实现
2020/09/28 Python
详解如何修改python中字典的键和值
2020/09/29 Python
CSS3打造磨砂玻璃背景效果
2016/09/28 HTML / CSS
百联网上商城:i百联
2017/01/28 全球购物
简单叙述一下MYSQL的优化
2016/05/09 面试题
总经理驾驶员岗位职责
2013/12/04 职场文书
学生会主席事迹材料
2014/01/28 职场文书
《观舞记》教学反思
2014/04/16 职场文书
2015年小学中秋节活动总结
2015/03/23 职场文书
2016年圣诞节义工活动总结
2016/04/01 职场文书