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 无限级菜单的简单实例
Feb 21 Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
Oct 10 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
Nov 09 Javascript
bootstrap 表单验证使用方法
Jan 11 Javascript
Bootstrap表格使用方法详解
Feb 17 Javascript
Angularjs为ng-click事件传递参数
Jun 15 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
Jul 03 Javascript
基于jQuery Ajax实现下拉框无刷新联动
Dec 06 jQuery
jQuery解析json格式数据示例
Sep 01 jQuery
浅谈layui使用模板引擎动态渲染元素要注意的问题
Sep 14 Javascript
ES6中Promise的使用方法实例总结
Feb 18 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
Sep 11 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
第十节--抽象方法和抽象类
2006/11/16 PHP
php根据分类合并数组的方法实例详解
2013/11/06 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
php用户注册信息验证正则表达式
2015/11/12 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
2019/02/13 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
js left,right,mid函数
2008/06/10 Javascript
js关于精确计算和数值格式化以及直接引js文件
2014/01/28 Javascript
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
原生js实现图片放大缩小计时器效果
2017/01/20 Javascript
JavaScript比较同一天的时间大小实例代码
2018/02/09 Javascript
解决element UI 自定义传参的问题
2018/08/22 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
在vue-cli中引入lodash.js并使用详解
2019/11/13 Javascript
js实现动态时钟
2020/03/12 Javascript
python list语法学习(带例子)
2013/11/01 Python
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
python实现飞机大战微信小游戏
2020/03/21 Python
python引用(import)某个模块提示没找到对应模块的解决方法
2019/01/19 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
详解Python中的分支和循环结构
2020/02/11 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
2020/02/28 Python
Selenium向iframe富文本框输入内容过程图解
2020/04/10 Python
Otel.com:折扣酒店预订
2017/08/24 全球购物
广州一家公司的.NET面试题
2016/06/11 面试题
自荐信结尾
2013/10/27 职场文书
自我鉴定200字
2013/10/28 职场文书
计算机实训报告总结
2014/11/05 职场文书
财务部会计岗位职责
2015/02/03 职场文书
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
2022/04/19 HTML / CSS