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 相关文章推荐
excel操作之Add Data to a Spreadsheet Cell
Jun 12 Javascript
XML的代替者----JSON
Jul 21 Javascript
setInterval,setTimeout与jquery混用的问题
Apr 08 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
Dec 02 Javascript
浅谈javascript的分号的使用
May 12 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
Aug 20 Javascript
VUE页面中加载外部HTML的示例代码
Sep 20 Javascript
浅谈webpack组织模块的原理
Mar 10 Javascript
vue实现点击展开点击收起效果
Apr 27 Javascript
微信小程序实现自定义picker选择器弹窗内容
May 26 Javascript
es6 for循环中let和var区别详解
Jan 12 Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
Feb 19 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
数据库中排序的对比及使用条件详解
2012/02/23 PHP
PHP整合PayPal支付
2015/06/11 PHP
PHP汉字转换拼音的函数代码
2015/12/30 PHP
Laravel中注册Facades的步骤详解
2016/03/16 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
2016/12/19 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
PHP简单实现循环链表功能示例
2017/11/10 PHP
javascript教程之不完整的继承(js原型链)
2014/01/13 Javascript
查询json的数据结构的8种方式简介
2014/03/10 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
jQuery Easyui DataGrid点击某个单元格即进入编辑状态焦点移开后保存数据
2016/08/15 Javascript
JSONP和批量操作功能的实现方法
2016/08/21 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
2018/11/28 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
[50:45]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第一场
2018/04/10 DOTA
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
30秒轻松实现TensorFlow物体检测
2018/03/14 Python
dataframe 按条件替换某一列中的值方法
2019/01/29 Python
利用python实现周期财务统计可视化
2019/08/25 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
2020/08/28 Python
浅析NumPy 切片和索引
2020/09/02 Python
python输出国际象棋棋盘的实例分享
2020/11/26 Python
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
农林环境专业求职信
2014/03/13 职场文书
助学贷款贫困证明
2014/09/23 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
导游带团欢迎词
2015/09/30 职场文书
继承Win10缺点!教你关闭Win11烦人的网络搜索
2021/11/23 数码科技
springboot+zookeeper实现分布式锁
2022/03/21 Java/Android