function Point ( x, y ) {
this.x = x;
this.y = y;
// this.func = m_func;
}
Point.prototype.func = m_func;
Point.prototype.s_name = "Point";
function m_func( num ) { ... }
new Point () ;
var newPoint = new Point( 1, 3 );
newPoint.func( newPoint.x + new Point.y);
PROTOTYPE是原型的意思,我改变在第九节中 Point 的实现。把 m_func 赋给了Point的原型。
这一改变唯一的好处就是我们不用在每次调用 Point 函数都对 func 属性赋值了,func 属性被保存在 Point 的原型对象中,从而节省了内存空间。 Point 与 Point.prototype 的关系请查阅相关的资料,这里不再详述。
用PROTOTYPE可以实现JAVA中的静态变量和静态方法(由于某些浏览器实现在对象创建之后才创建它的原型对象,所以建议在使用原型对象中静态成员之前先调用一次构造器方法,如同样例中 new Point();语句,调用结束之后,无用对象将被回收,但其原型对象将继续驻留在内存中),在Javascript支持的有限的对象继承也与PROTOTYPE有一定联系。
11、ARRAY
var arr_8 = new Array(8);
var arr = new Array();
var arr_d = [ 1, 2, , 4 , .., "Hi", null, true, document ];
var arr_m = [ [ 1, 2, 3, 4 ], [ 5, 6, 7], [ 8 ] ];
arr_8[ 3 ] = "ABC";
arr[ 100 ] = 8.8888;
arr_d[ 0 ] = "CDE";
arr_m[ 1 ][ 0 ] = "XYZ";
数组的创建可以通过 new Array 的构造器方法(参数是数组初始长度,空参数表示零长度)。
或者是把[ 数据 , 数据 , ... , 数据]的数组直接量赋给变量,数据之间用逗号分隔,arr_d中蓝色的部分有两个连续的逗号表示第三个元素空缺,其值为 undefined。
构造器方法的样例: arr_8和arr ;数组直接量的样例: arr_d和arr_m 。
Javascript中的数组是动态数组,它将随着元素数量自动调节数组长度。
Javascript中的数组元素没有任何类型限制,未初始化的元素值为 undefined。
Javascript中的多维数组的实现与JAVA中的完全相同。arr_m中 [ 1, 2, 3, 4] 表示 arr_m[0]所指向的第二维数组的数据。
Javascript对数组的访问与JAVA中的完全相同。
var textfield = document.all[ "textfield" ];
document.all 是一个数组吗?不完全是。
那为什么我们可以用 “textfield” 来访问我们的对象呢?
这是因为以上我们所看到的是Javascript中非常特殊的用法——关联数组,也可以称之为索引器。
对象名[ "成员名" ] = 对象名.成员名
关联数组的使用,可以使某些操作从硬编码中解脱出来,使之更具有灵活性。请看下面一个例子。
假如我们在执行某个与对象相关的操作时需要靠外界输出才能确定调用的函数。
方案之一:SWITCH,每更改一个分支就需要更新该方法。
方案之二:对象 + . + 函数名();,语法错误。
方案之三:对象 [ 函数名字符串 ]();,好的。
方案之四:eval(对象名字符串 + "." + 函数名字符串 + "();");,也可以的。
关联数组的使用,使我们能够用字符串,数字或者其他的类型的变量作为索引来访问我们所需要访问的属性和方法。
在FOR-EACH中常常会用这种方法来遍历对象或数组属性和方法。
12、UNDEFINDED-NULL