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 相关文章推荐
ie与ff下的event事件使用介绍
Nov 25 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
Nov 23 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
Mar 10 Javascript
BootStrap中Datepicker控件带中文的js文件
Aug 10 Javascript
Vue.js双向绑定操作技巧(初级入门)
Dec 27 Javascript
5种JavaScript脚本加载的方式
Jan 16 Javascript
JavaScript和jQuery制作光棒效果
Feb 24 Javascript
详解打造 Vue.js 可复用组件
Mar 24 Javascript
详解Node全局变量global模块
Sep 28 Javascript
javascript将json格式数组下载为excel表格的方法
Dec 22 Javascript
javascript读取本地文件和目录方法详解
Aug 06 Javascript
JavaScript Html实现移动端红包雨功能页面
Jan 10 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的无限分类实现想法~
2007/01/02 PHP
php数组合并的二种方法
2014/03/21 PHP
Codeigniter中集成smarty和adodb的方法
2016/03/04 PHP
PHP实现活动人选抽奖功能
2017/04/19 PHP
Yii2 queue的队列使用详解
2019/07/19 PHP
javascript编程起步(第七课)
2007/02/27 Javascript
根据出生日期自动取得星座的js代码
2010/07/20 Javascript
jquery 查找select ,并触发事件的实现代码
2011/03/30 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
Bootstrap表单布局
2016/07/19 Javascript
利用JS hash制作单页Web应用的方法详解
2017/10/10 Javascript
vue动态配置模板 'component is'代码
2019/07/04 Javascript
详解mpvue开发微信小程序基础知识
2019/09/23 Javascript
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
vue-cli3中配置alias和打包加hash值操作
2020/09/04 Javascript
Python创建日历实例
2014/08/21 Python
Django中的Signal代码详解
2018/02/05 Python
python 并发下载器实现方法示例
2019/11/22 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
python实现双色球随机选号
2020/01/01 Python
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
印度购物网站:TATA CLiQ
2017/11/23 全球购物
设计师大码女装:11 Honoré
2020/05/03 全球购物
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
枚举与#define宏的区别
2014/04/30 面试题
软件测试常见笔试题
2012/02/04 面试题
怎么写好自荐信
2013/10/30 职场文书
委托书范本
2014/04/02 职场文书
法定代表人资格证明书
2014/09/11 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
最感人的道歉情书
2015/05/12 职场文书
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android
如何解决php-fpm启动不了问题
2021/11/17 PHP
Python获取指定日期是"星期几"的6种方法
2022/03/13 Python