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几个不错的函数 $$()
Oct 09 Javascript
js调用activeX获取u盘序列号的代码
Nov 21 Javascript
javascript对talbe进行动态添加、删除、验证实现代码
Mar 29 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
May 01 Javascript
JS实现的通用表单验证插件完整实例
Aug 20 Javascript
javascript 利用arguments实现可变长参数
Nov 21 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
Dec 26 Javascript
微信小程序 开发之快递查询功能的实现
Jan 09 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
Mar 16 jQuery
Vue使用Proxy监听所有接口状态的方法实现
Jun 07 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
Oct 30 Javascript
JS脚本实现定时到网站上签到/签退功能
Apr 22 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
第一个无线电台是由谁发明的
2021/03/01 无线电
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
php用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
php使用curl简单抓取远程url的方法
2015/03/13 PHP
Javascript下IE与Firefox下的差异兼容写法总结
2010/06/18 Javascript
JavaScript学习笔记之JS事件对象
2015/01/22 Javascript
jQuery+CSS3实现树叶飘落特效
2015/02/01 Javascript
JavaScript 面向对象与原型
2015/04/10 Javascript
浅谈javascript中的DOM方法
2015/07/16 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
2015/10/14 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
JavaScript和jQuery制作光棒效果
2017/02/24 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
javascript将list转换成树状结构的实例
2017/09/08 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
Python创建xml的方法
2015/03/10 Python
Python中的Classes和Metaclasses详解
2015/04/02 Python
python optparse模块使用实例
2015/04/09 Python
Python同时向控制台和文件输出日志logging的方法
2015/05/26 Python
Windows下安装python2和python3多版本教程
2017/03/30 Python
对pandas通过索引提取dataframe的行方法详解
2019/02/01 Python
解决python gdal投影坐标系转换的问题
2020/01/17 Python
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
Unineed旗下时尚轻奢网站:FABHunt
2019/05/13 全球购物
给水工程专业毕业生自荐信
2014/01/28 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
治庸问责心得体会
2014/09/12 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
西双版纳导游词
2015/02/03 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
远程教育培训心得体会
2016/01/09 职场文书
go:垃圾回收GC触发条件详解
2021/04/24 Golang