JavaScript高级程序设计


Posted in Javascript onDecember 29, 2006

前一章简要谈及对象的使用,现在要详细介绍它们了。对象的创建或销毁都在JavaScript执行过程中发生,理解这种范式的含义对理解整个语言至关重要。
3.2.1 声明和实例化
对象是用关键字new后跟要实例化的类的名字创建的:
JavaScript高级程序设计
第一行代码创建了Object类的一个实例,并把它存储在变量oObject中。第二行代码创建了String类的一个实例,把它存储在变量oStringObject中。如果构造函数无参数,括号则不是必需的,因此可以采用下面的形式重写上面的两行代码:
JavaScript高级程序设计
3.2.2  对象引用
在第2章中,介绍了引用类型的概念。在ECMAScript中,不能访问对象的物理表示,只能访问对象的引用。每次创建对象,存储在变量中的都是该对象的引用,而不是对象本身。
3.2.3  对象废除
ECMAScript有无用存储单元收集程序,意味着不必专门销毁对象来释放内存。当再没有对对象的引用时,称该对象被废除(dereference)了。运行无用存储单元收集程序时,所有废除的对象都被销毁。每当函数执行完它的代码,无用存储单元收集程序都会运行,释放所有的局部变量,还有在一些其他不可预知的情况下,无用存储单元收集程序也会运行。
把对象的所有引用都设置为null,可以强制性的废除对象。例如:
JavaScript高级程序设计
当变量oObject设置为null后,对第一个创建的对象的引用就不存在了。这意味着下次运行无用存储单元收集程序时,该对象将被销毁。
每用完一个对象后,就将其废除,来释放内存,这是个好习惯。这样还确保不再使用已经不能访问的对象,从而防止程序设计错误的出现。此外,旧的浏览器(如IE/Mac)没有全面的无用存储单元回收程序,所以在卸载页面时,对象可能不能被正确销毁。废除对象和它的所有特性是确保内存使用正确的最好方法。
废除对象的所有引用时要当心。如果一个对象有两个或更多引用,则要正确废除该对象,必须将其所有引用都设置为null
3.2.4  早绑定和晚绑定
所谓绑定(binding),即把对象的接口与对象实例结合在一起的方法。
早绑定(early binding)是指在实例化对象之前定义它的特性和方法,这样编译器或解释程序就能提前转换机器代码。在Java和Visual Basic这样的语言中,有了早绑定,就可以在开发环境中使用IntelliSense(即给开发者提供其对象中特性和方法列表的功能)。ECMAScript不是强类型语言,所以不支持早绑定。
另一方面,晚绑定(late binding)指的是编译器或解释程序在运行前,不知道对象的类型。使用晚绑定,无需检查对象的类型,只需要检查对象是否支持特性和方法即可。ECMAScript中的所有变量都采用晚绑定方法,这样就允许执行大量的对象操作,而无任何惩罚。

Javascript 相关文章推荐
jQuery实战之品牌展示列表效果
Apr 10 Javascript
用Javascript评估用户输入密码的强度实现代码
Nov 30 Javascript
javascript字符串替换及字符串分割示例代码
Dec 12 Javascript
JS实现鼠标移上去显示图片或微信二维码
Dec 14 Javascript
微信小程序 合法域名校验出错详解及解决办法
Mar 09 Javascript
详解tween.js的使用教程
Sep 14 Javascript
详解JS构造函数中this和return
Sep 16 Javascript
vue.js绑定事件监听器示例【基于v-on事件绑定】
Jul 07 Javascript
js事件触发操作实例分析
Jun 21 Javascript
Vue实战教程之仿肯德基宅急送App
Jul 19 Javascript
express中static中间件的具体使用方法
Oct 17 Javascript
Vue实现手机计算器
Aug 17 Javascript
JavaScript 参考教程
Dec 29 #Javascript
js自带函数备忘 数组
Dec 29 #Javascript
slice函数的用法 之不错的应用
Dec 29 #Javascript
通过js脚本复制网页上的一个表格的不错实现方法
Dec 29 #Javascript
javascript中对对层的控制
Dec 29 #Javascript
JavaScript方法和技巧大全
Dec 27 #Javascript
fromCharCode和charCodeAt 方法
Dec 27 #Javascript
You might like
一些 PHP 管理系统程序中的后门
2009/08/05 PHP
Laravel统计一段时间间隔的数据方法
2019/10/09 PHP
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
2011/07/11 Javascript
jQuery getJSON()+.ashx 实现分页(改进版)
2013/03/28 Javascript
基于datagrid框架的查询
2013/04/08 Javascript
Jquery时间验证和转换工具小例子
2013/07/01 Javascript
Nodejs+express+html5 实现拖拽上传
2014/08/08 NodeJs
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
全面解析node 表单的图片上传
2016/11/21 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
2016/11/22 Javascript
Bootstrap fileinput组件封装及使用详解
2017/03/10 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
详解如何构建Angular项目目录结构
2017/07/13 Javascript
vue 点击按钮增加一行的方法
2018/09/07 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
Vue如何实现监听组件原生事件
2020/07/03 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
2020/10/17 Javascript
Python命令行参数解析模块getopt使用实例
2015/04/13 Python
Python判断文本中消息重复次数的方法
2016/04/27 Python
Python编程中实现迭代器的一些技巧小结
2016/06/21 Python
Python 内置函数memoryview(obj)的具体用法
2017/11/23 Python
python实现手机销售管理系统
2019/03/19 Python
Python面向对象之继承和多态用法分析
2019/06/08 Python
python抓取多种类型的页面方法实例
2019/11/20 Python
Python如何操作docker redis过程解析
2020/08/10 Python
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
财务管理专业毕业生求职信范文
2013/09/21 职场文书
初中同学聚会邀请函
2014/02/03 职场文书
应届生自荐书
2014/06/23 职场文书
高中课前三分钟演讲稿
2014/09/13 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
2014年质检员工作总结
2014/11/18 职场文书
HTML5页面音频自动播放的实现方式
2021/06/21 HTML / CSS
python pygame 开发五子棋双人对弈
2022/05/02 Python