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 相关文章推荐
jQuery文本框(input textare)事件绑定方法教程
Apr 24 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
Jul 02 Javascript
ExtJS的拖拽效果示例
Dec 09 Javascript
JS辨别访问浏览器判断是android还是ios系统
Aug 19 Javascript
JavaScript的arguments对象应用示例
Sep 15 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
Sep 09 Javascript
canvas时钟效果
Feb 16 Javascript
vue项目中用cdn优化的方法
Jan 03 Javascript
React之PureComponent的使用作用
Jul 10 Javascript
Vue中mintui的field实现blur和focus事件的方法
Aug 25 Javascript
jquery+css实现Tab栏切换的代码实例
May 14 jQuery
深入webpack打包原理及loader和plugin的实现
May 06 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函数preg_match_all正则表达式的基本使用详细解析
2013/08/31 PHP
PHP判断一个字符串是否是回文字符串的方法
2015/03/23 PHP
PHP实现的简单在线计算器功能示例
2017/08/02 PHP
PHP封装请求类实例分析【基于Yii框架】
2019/10/17 PHP
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
js删除数组元素、清空数组的简单方法(必看)
2016/07/27 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
JS实现复制内容到剪贴板功能
2017/02/05 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
微信小程序 同步请求授权的详解
2017/08/04 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
swiper Scrollbar滚动条组件详解
2019/09/08 Javascript
Python 2.7.x 和 3.x 版本的重要区别小结
2014/11/28 Python
Python语言实现将图片转化为html页面
2017/12/06 Python
Python实现判断并移除列表指定位置元素的方法
2018/04/13 Python
python实现多进程代码示例
2018/10/31 Python
django 中的聚合函数,分组函数,F 查询,Q查询
2019/07/25 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
Gretna Green中文官网:苏格兰格林小镇
2019/10/16 全球购物
几个人围成一圈的问题
2013/09/26 面试题
软件测试面试题
2014/01/05 面试题
服装电子商务创业计划书
2014/01/30 职场文书
股票投资建议书
2014/05/19 职场文书
2014年教师政治学习材料
2014/06/02 职场文书
市场推广策划方案
2014/06/02 职场文书
2015年保洁工作总结范文
2015/04/28 职场文书
电视新闻稿
2015/07/17 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
党校团干班培训心得体会
2016/01/06 职场文书
2016年清明节期间群众祭祀活动工作总结
2016/04/01 职场文书
MySQL中的隐藏列的具体查看
2021/09/04 MySQL