对象的创建和销毁都在 JavaScript 执行过程中发生。把对象的所有引用都设置为 null,可以强制性地废除对象。
在 ECMAScript 中,所有对象并非同等创建的。
一、对象类型
一般来说,可以创建并使用的对象有三种:本地对象、内置对象和宿主对象。
1. 本地对象
本地对象就是 ECMA-262 定义的类(引用类型)。它们包括:
- Object
- Function
- Array
- String
- Boolean
- Number
- Date
- RegExp
- Error
- EvalError
- RangeError
- ReferenceError
- SyntaxError
- TypeError
- URIError
2. 内置对象
ECMA-262 只定义了两个内置对象,即 Global 和 Math (它们也是本地对象,根据定义,每个内置对象都是本地对象)。
3. 宿主对象
所有非本地对象都是宿主对象(host object),即由 ECMAScript 实现的宿主环境提供的对象。
所有 BOM 和 DOM 对象都是宿主对象。
二、对象作用域
作用域指的是变量的适用范围。
在传统的面向对象程序设计中,主要关注于公用和私有作用域。公用作用域中的对象属性可以从对象外部访问,即开发者创建对象的实例后,就可使用它的公用属性。而私有作用域中的属性只能在对象内部访问,即对于外部世界来说,这些属性并不存在。这意味着如果类定义了私有属性和方法,则它的子类也不能访问这些属性和方法。
受保护作用域也是用于定义私有的属性和方法,只是这些属性和方法还能被其子类访问。
- ECMAScript 只有公用作用域
- 建议性的解决方法:开发者确定了一个规约,在属性前后加下划线,告诉其他开发者,应该把该属性看作私有的。
- ECMAScript 没有静态作用域
1. 关键字this
在 ECMAScript 中,要掌握的最重要的概念之一是关键字 this 的用法,它用在对象的方法中。关键字 this 总是指向调用该方法的对象。
var oCar = new Object; oCar.color = "red"; oCar.showColor = function() { alert(this.color); }; oCar.showColor(); //输出 "red"
在上面的代码中,关键字 this 用在对象的 showColor() 方法中。在此环境中,this 等于 oCar。等同于:
var oCar = new Object; oCar.color = "red"; oCar.showColor = function() { alert(oCar.color); }; oCar.showColor(); //输出 "red"
使用this的原因:因为在实例化对象时,总是不能确定开发者会使用什么样的变量名。使用 this,即可在任何多个地方重用同一个函数。