目录
1、创建 Object 对象
对象是 JavaScript 的核心概念之一,也是最常用的数据类型,即引用型数据。对象可以包含多个属性,属性以名值对的形式存在,名称是字符串,值可以是任意类型的数据。除了字符串、数字、布尔、symbol、null 和 undefined 六种基本数据类型之外,JavaScript 中的值都是对象。创建对象有 3 种方法,具体介绍如下。
1.1、使用构造函数创建对象
使用 Object 构造函数创建的对象是一个不包含任何属性和方法的空对象,而使用内置构造函数创建的对象将会继承该构造函数的属性和方法。
var obj = new Object(); //创建一个空对象
var arr = new Array(); //创建一个空的数组对象
在上面示例中第 2 行代码创建了一个空的数组对象,但是这个新创建的对象 arr 具有数组操作的基本方法和属性,如 length 属性可以获取该数组的元素个数,而 push() 方法将会为该数组对象添加新元素。
在 JavasScript 中,Object、Array、Function、String 等内置对象都是构造函数,使用 new 运算符可调用它们,并初始化为一个个对象实例。在 JavaScript 中,构造函数具有如下特性。
1、使用new运算符进行调用,也可以使用小括号调用,但返回值不同。
2、构造函数内部通过this关键字指代实例化对象,或者指向调用对象。
3、在构流函数内可以通过应运算符声明本地成员。当然,构造函数结构体内也可以包含私有变量或函数,以及任意执行语句。
1.2、使用对象直接量创建对象
除了使用构造函数创建对象外,还可以使用对象直接量来定义对象,具体用法如下:
var objectName = { var obj = { //对象直接量
属性名:值, a:1, //定义属性,即使属性名不加 '' 引号,它也是字符串
属性名:值,... b:true //定义属性,即使属性名不加 '' 引号,它也是字符串
}; }
简单说明:在对象直接量中,属性名与属性值之间通过冒号进行分隔。属性值可以是任意类型的数据,属性名可以是JavaScript 标识符,或者是任意形式的字符串。属性与属性之间通过逗号进行分隔,最后一个属性末尾不需要逗号。
2、操作 Object 对象
2.1、引用对象
在创建对象之后,可以把对象的地址默值给变量,实现变量对对象的引用。当把变量赋值给其他变量时,则实现多个变量引用同一个对象。
下面例子,定义一个对象直接量,然后定义变量 obj,引用该对象直接量,当 obj 赋值给 obj1 后,再删除变量 obj 对对象的引用,但是对象直接量依然存在,并没有因为删除变量 obj 而同时被删除。
obj = { //创建对象,并引用该对象给变量
x:1,
y:true
}
obj1 = obj; //复制变量 obj
alert(delete obj); //删除变量 obj,返回值为 true,说明删除成功
alert(obj1.x); //读取对象内数据,是示为1,说明对象依然存在
alert(obj.x); //使用 obj 读取对象内的数据,提示没有定义对象
2.2、复制对象
复制对象的设计思路是:利用 for/in 语句遍历对象成员,然后逐一复制给另一个对象。
在本例中,定义一个 Fun 类,其包含 4 个成员。然后实例化并把它的所有属性和方法都复制给一个空对象 obj ,这样对象 obj 就复制了 Fun 类的所有属性和方法。
function Fun(x,y){ //构造函数 Fun
this.x = ×; //本地属性x
this.y = y; //本地属性y
this.add = function(){ //本地方法add()
return this.x + this.y;
}
}
Fun.prototype.mul = function(){ //原型方法 mul()
return this.x * this.y;
}
var fun = new Fun(2,3); //实例化构造函数,并进行初始化
var obj = {}; //定义一个空对象 obj
for(var i in fun){ //遍历构造函数的实例,把它的所有成员赋值给对象 obj
obj[i] = fun[i];
}
alert(obj.x); //返回 2
alert(obj.y); //返回 3
alert(obj.add); //返回 5
alert(obj.mul); //返回 6
2.3、克隆对象
通过克隆对象可以避免复制对象操作的低效率。具体方法如下:
首先,为 Function 对象扩展一个方法,该方法能够把参数对象赋值给一个空构造函数的原型对象,然后实例化构造函数,并返回实例对象,这样该对象就拥有构造函数包含的所有成品。
Function.prototype.clone = function(obj){ //对象克隆方法
function Temp(){}; //新建空构造函数
Temp.prototype = obj; //把参数对象原值给该构造函数的原型对象
return new Temp(); //返回实例化后的对象
}
然后,调用该方法来克隆对象。克隆方法返回的是一个空对象,不过它存储指了指向给定对象的原型对象指针。这样就可以利用原型链来访问它们,从而在不同对象之间实现继承关系。
var obj = Function.clone(new Fun(2,3)); //调用Function对象的克隆方法
alert(obj.x); //返回 2
alert(obj.y); //返回 3
alert(obj.add); //返回 5
alert(obj.mul); //返回 6
2.4、销毁对象
JavaScript 提供了一套垃圾回收机制,能够自动回收无用存储单元。当对象没有被任何变量引用时,JavaScript 会自动侦测,并运行垃圾回收程序把这些对象注销,以释放内存。
每当函数对象被执行完毕,垃圾回收程序就会自动被运行,释放函数所占用的资源,并释放局部变量。当把对象的所有引用变量都设置为 null 时,可以强制对象处于废除状态,并被回收。
var obj = { //创建对象,并引用该对象给变量obj
x:1,
y:true
}
obj = null; //定义对象引用变量为 null,即废除对象
alert(obj.x); //提示系统错误,找不到对象
对于不用的对象,应该把其所有引用变量都设置为 null,将对象废除,以释放内存空间,既节省系统开支,又可以预防错误。