《JavaScript权威指南》第六版学习笔记——第六章 对象

时间:2022-08-27 08:14:37

1、全局变量与局部变量

定义在函数外的变量一定是全局变量;定义在函数内的变量,如果声明了var,那该变量就是局部变量,如果不声明var,那么该变量就是全局变量。
var global = "Global";
test();
function test(){
	var local = "Local";
	document.writeln(global);
	document.writeln(local);
}

document.writeln(global);
document.writeln(local);
将输出下列字符串:
《JavaScript权威指南》第六版学习笔记——第六章 对象
若将var local = "Local";改为local = "Local";将输出下列字符串,说明了此时变量local已经是一个全局变量
《JavaScript权威指南》第六版学习笔记——第六章 对象

2、with语句:对象操作语句

功能:为一段程序建立默认对象。

格式:

with(<对象>){

<语句组>

}

3、JavaScript对象三个相关的对象特征

i)对象的原型(prototype)指向另外一个对象,本对象的属性继承自它的原型对象。
ii)对象的类(class)是一个标识对象类型的字符串。
iii)对象的扩展标记(extensible flag)指明了(在ECMAScript5中)是否可以向该对象添加新属性。

4、三类JavaScript对象和两类属性

【三类JavaScript对象】:
i)内置对象(native object)是由ECMAScript规范定义的对象或类。例如,数组、函数、日期和正则表达式都是内置对象。
ii)宿主对象(host object)是由JavaScript解释器所嵌入的宿主环境(比如Web浏览器)定义的。客户端JavaScript中表示网页结构的HTMLElement对象均是宿主对象。既然宿主环境定义的方法可以当成普通的JavaScript函数对象,那么宿主对象也可以当成内置对象。
iii)自定义对象(user-defined object)是由运行中的JavaScript代码创建的对象。
【两类属性】:
i)*属性(own property)是直接在对象中定义的属性。
ii)继承属性(inherited property)是在对象的原型对象中定义的属性。
5、创建对象的三种方式
可以通过对象直接量、关键字new和(ECMAScript5中的)Object.create()函数来创建对象。
i)对象直接量
在ECMAScript5中,对象直接量中的最后一个属性后的逗号将忽略,且在ECMAScript3中的大部分实现中也可以忽略这个逗号,但在IE中则报错。
ii)通过new创建对象
new运算符创建并初始化一个新对象,关键字new后跟随一个函数调用。这里的函数称做构造函数,构造函数用以初始化一个新创建的对象。JavaScript语言核心中的原始类型都包含内置构造函数。
iii)原型
每一个JavaScript对象(null除外)都和另一个对象相关联。“另一个”对象就是我们熟知的原型,每一个对象都从原型继承属性。
iv)Object.create()
ECMAScript5中定义了一个名为Object.create()的方法,它创建一个新对象,其中第一个参数是这个对象的原型。Object.create()提供第二个可选的参数,用以对对象的属性进行进一步描述。
Object.create()是一个静态的函数,而不是提供给某个对象调用的方法。使用它的方法很就简单,只须传入所需的原型对象即可:
var o1=Object.create({x:1,y:2});		//o1继承了属性x和y
可以通过传入参数null来创建一个没有原型的新对象,但通过这种方式创建的对象不会继承任何东西,甚至不包括基础方法,比如toString(),也就是说,它将不能和“+”运算符一起正常工作。
var o2 = Object.create(null);//o2不继承任何属性和方法
如果想创建一个普通的空对象(比如通过{}或new Object()创建的对象),需要传入Object.prototype:
var o3 = Object.create(Object.prototype);//o3和{}和new Object()一样
可以通过任意原型创建新对象(换句话说,可以使任意对象可继承),这是一个强大的特性。