JScript对象
Jscript 对象是属性和方法的集合。一个方法就是一个函数,是对象的成员。属性是一个值或一组值(以数组或对象的形式),是对象的成员。Jscript 支持四种类型的对象:内部对象、生成的对象、宿主给出的对象(如 Internet 浏览器中的 window 和 document)以及 ActiveX 对象(外部组件)。
作为数组的对象
在 Jscript 中,对象和数组几乎是以相同的方式处理的。对象和数组均可以被赋予任意值,实际上数组只是一种特殊的对象。数组和对象的区别在于数组有一个“奇妙的” length 属性,而对象没有。这意味着可以给数组的一个元素赋予比其他元素更大的值。例如,myArray[100] = "hello" — 然后 length 属性将自动地被更新为 101(新长度)。同样,如果修改数组的 length 属性,将删除不再是数组部分的元素。
Jscript 中所有的对象均支持“expando”属性或那些可以在运行时动态添加和删除的属性。这些属性可以有包含数字的任意名称。如果属性的名称是简单的标识符<<参考标识符规则>>,可以在对象名称的后面加句点,例如:
1 2 3 4 5 | <code> var myObj = new Object();
<code>myObj.name = "Fred" ;</code>
<code>myObj.age = 42;</code>
|
如果属性名称不是一个简单的标识符,或者在写脚本的时候不知道,可以在方括号中使用任意表达式来索引属性。在 Jscript 中所有 expando 属性的名称在被添加到对象之前被转换为字符串。
1 2 3 4 5 6 7 8 9 10 11 | <code> var myObj = new Object();
<code>
<code>
<code>
<code>myObj[ "not a valid identifier" ] = "This is the property value" ;</code>
<code>
<code>
<code>myObj[100] = "100" ;</code>
|
传统的作法是赋给数组元素以 0 开始的数字索引。这些数组元素与 length 属性相交互。然而,由于所有的数组也是对象,也支持 expando 属性。请注意,虽然如此,expando 属性并不以任何方式与 length 属性相交互。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <code>
<code> var myArray = new Array(3);</code>
<code>
<code>myArray[0] = "Hello" ;</code>
<code>myArray[1] = 42;</code>
<code>myArray[2] = new Date (2000, 1, 1);</code>
<code>
<code>window.alert(myArray.length);</code>
<code>
<code>myArray.expando = "JScript!" ;</code>
<code>myArray[ "another Expando" ] = "Windows" ;</code>
<code>
<code>
<code>window.alert(myArray.length);</code>
|
虽然 Jscript 并不直接支持多维数组,但是可以在数组元素中存储任意种类的数据 — 包含其他数组。所以通过在另一个数组的元素里存储其他数组可以得到多维数组的特性。例如,下面的代码为最大为 5 的数字建立了乘法表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <code>
<code> var iMaxNum = 5;</code>
<code>
<code> var i, j;</code>
<code>
<code>
<code> var MultiplicationTable = new Array(iMaxNum + 1);</code>
<code>
<code> for (i = 1; i <= iMaxNum; i++)</code>
<code>{</code>
<code>
<code> MultiplicationTable[i] = new Array(iMaxNum + 1);</code>
<code>
<code> for (j = 1; j <= iMaxNum; j++)</code>
<code> {</code>
<code> MultiplicationTable[i][j] = i * j;</code>
<code> }</code>
<code>}</code>
<code>window.alert(MultiplicationTable[3][4]);
<code>window.alert(MultiplicationTable[5][2]);
<code>window.alert(MultiplicationTable[1][4]);
|