|
创建自己的对象
www.51chm.com
要创建一个对象的实例,首先必须定义该对象,即通过给定适当的属性以及方法。例如,下面的示例定义了一个 pasta 对象。请注意关键字 this,需要使用这个关键字来引用当前对象。
function pasta( grain, grain2, width, shape, shapenum, extent, egg )
{
this.length = 7; // 对象的属性数量,不包括其本身。
this.grain = grain; // 是用哪种粮食制成的? (string 类型)
this.grain2 = grain2; // 是否使用了其他面粉? (string 类型)
this.width = width; // 有多宽? (number 类型)
this.shape = shape; // 横截面是什么类型? (string 类型)
this.shapenum = shapenum; // 是某种已登记的形状吗? (number 类型)
this.extent = extent; // 有多长? (number 类型)
this.egg = egg; // 是否使用了蛋黄作为粘合剂? (Boolean 类型)
}
在定义了对象后,就可以使用 new 运算符来创建该对象的实例。
var spaghetti = new pasta("wheat", "", 0.2, "circle", 9, 30, true);
var linguine = new pasta("wheat", "", 0.3, "oval", 17, 30, true);
可以给一个对象的实例添加属性来更改该实例,但这些属性不会成为该对象定义的一部分,除非专门添加该属性,否则也不会在其他实例中出现。如果希望在该对象的所有实例中都具有额外的属性,必须将其添加到该对象的定义部分。
// 给 spaghetti 添加额外的属性。
spaghetti.color = "pale straw";
spaghetti.drycook = 7;
spaghetti.freshcook = 0.5;
var chowFun = new pasta("rice", "", 3, "flat", , 12, false);
/*
chowFun 对象、linguine 对象和 pasta 对象的定义中都没有给 spaghetti 对象的三个额外属性。
*/
在定义部分包括方法
在对象的定义部分也可以包括方法。下面的示例创建了一个由字符串数组和一个方法组成的对象。该方法将一个字符串添加到该数组,同时增加了该数组的大小。请注意这将使得该对象的每个实例能无限地增大。
function addItem(newItem) // 定义一个扩大列表的函数。
{
this.length += 1; // 增加数组的长度。
this[(this.length-1)] = newItem; // 添加新项,并保持项的编号方式。
}
function shoppingList(firstItem) // 定义一个 "shopping list" 对象。
{
this.length = 2; // 该对象的属性个数,不包括该一个。
this.addItem = addItem; // 包括 addItem 函数,作为一个方法。
this[(this.length-1)] = firstItem; // 第一项的编号为 1。
}
var myList = new shoppingList("Milk");
myList.addItem("Eggs"); // 使用该方法来添加 Eggs,这将成为第 2 项。
myList.addItem("Breadfruit"); // Breadfruit 变成第 3 项。
此时,该数组的内容如下:
- myList[length] 为 4
- myList[addItem] 为 addItem 函数
- myList[1] 为 Milk
- myList[2] 为 Eggs
- myList[3] 为 Breadfruit
请注意,如果索引是按照严格的数字方式处理,则该索引可能与您所预期的不完全一致。如果对该数组执行 for...in 循环,该循环将按照此处给出的顺序进行循环,且循环变量为 "length" 的初始值,而不是 0。
www.51chm.com
|