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采用数组实现tab菜单切换效果
Dec 12 Javascript
JS检测图片大小的实例
Aug 21 Javascript
8个超实用的jQuery功能代码分享
Jan 08 Javascript
js函数与php函数的区别实例浅析
Jan 12 Javascript
Angular.js如何从PHP读取后台数据
Mar 24 Javascript
js修改onclick动作的四种方法(推荐)
Aug 18 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
Dec 30 Javascript
jquery实现弹窗功能(窗口居中显示)
Feb 27 Javascript
vue组件之间通信实例总结(点赞功能)
Dec 05 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
Mar 14 Javascript
微信小程序实现拍照画布指定区域生成图片
Jul 18 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
Jul 24 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封装的Twitter访问类实例
2015/07/18 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
php获取访问者浏览页面的浏览器类型
2017/01/23 PHP
laravel 数据验证规则详解
2019/10/23 PHP
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
JavaScript中原型和原型链详解
2015/02/11 Javascript
jquery图片切换插件
2015/03/16 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
jQuery实现延迟跳转的方法
2015/06/05 Javascript
JavaScript调用浏览器打印功能实例分析
2015/07/17 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
VUEJS实战之构建基础并渲染出列表(1)
2016/06/13 Javascript
详解Vue单元测试case写法
2018/05/24 Javascript
基于elementUI实现图片预览组件的示例代码
2019/03/31 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
JavaScript数组去重实现方法小结
2020/01/17 Javascript
[57:41]Secret vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
python数据结构之二叉树的建立实例
2014/04/29 Python
Python代码的打包与发布详解
2014/07/30 Python
Python中的字符串替换操作示例
2016/06/27 Python
如何高效使用Python字典的方法详解
2017/08/31 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
利用Python求阴影部分的面积实例代码
2018/12/05 Python
简单分析python的类变量、实例变量
2019/08/23 Python
Python基于内置库pytesseract实现图片验证码识别功能
2020/02/24 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
Python 创建TCP服务器的方法
2020/07/28 Python
急诊科护士自我鉴定
2013/10/14 职场文书
校园开放日新闻稿
2015/07/17 职场文书
2016年教代会开幕词
2016/03/04 职场文书
争做文明公民倡议书
2019/06/24 职场文书
创业计划书之养殖业
2019/10/11 职场文书
Redis基本数据类型String常用操作命令
2022/06/01 Redis