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 相关文章推荐
JavaScript 实现模态对话框 源代码大全
May 02 Javascript
javascript AutoScroller 函数类
May 29 Javascript
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
May 25 Javascript
javascript中字符串的定义示例代码
Dec 19 Javascript
js 获取时间间隔实现代码
May 12 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
Aug 12 Javascript
jQuery鼠标事件汇总
Aug 30 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
Nov 07 Javascript
利用JS测试目标网站的打开响应速度
Dec 01 Javascript
Vue.js递归组件构建树形菜单
Dec 24 Javascript
mpvue开发音频类小程序踩坑和建议详解
Mar 12 Javascript
js console.log打印对象时属性缺失的解决方法
May 23 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
在mysql数据库原有字段后增加新内容
2009/11/26 PHP
php表单提交问题的解决方法
2011/04/12 PHP
PHP数组无限分级数据的层级化处理代码
2012/12/29 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
2014/10/29 PHP
两种php去除二维数组的重复项方法
2015/11/04 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
PHP 信号管理知识整理汇总
2017/02/19 PHP
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
JS控制显示隐藏兼容问题(IE6、IE7、IE8)
2010/04/01 Javascript
Cookie 小记
2010/04/01 Javascript
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
针对JavaScript中this指向的简单理解
2016/08/26 Javascript
AngularJs入门教程之环境搭建+创建应用示例
2016/11/01 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
2017/03/19 Javascript
JS简单实现父子窗口传值功能示例【未使用iframe框架】
2017/09/20 Javascript
Angularjs实现多图片上传预览功能
2018/07/18 Javascript
微信运维交互机器人的示例代码
2018/11/12 Javascript
JS隐藏号码中间4位代码实例
2019/04/09 Javascript
8个有意思的JavaScript面试题
2019/07/30 Javascript
Vue Components 数字键盘的实现
2019/09/18 Javascript
vue使用swiper.js重叠轮播组建样式
2019/11/14 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
选择python进行数据分析的理由和优势
2019/06/25 Python
python实现DEM数据的阴影生成的方法
2019/07/23 Python
如何利用python发送邮件
2020/09/26 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
数控个人求职信范文
2014/02/03 职场文书
普通党员个人整改措施
2014/10/27 职场文书
酒店保洁员岗位职责
2015/02/26 职场文书
创业不要错过,这4种餐饮新模式
2019/07/18 职场文书