看js的资料,随手记下一些认为实用的东东,以飨和我一样正在学习的诸位看官。
“JavaScript 为函数对象定义了两个方法:apply 和call,它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别:
Function.prototype.apply(thisArg,argArray); Function.prototype.call(thisArg[,arg1[,arg2…]]); 从函数原型可以看到,第一个参数都被取名为thisArg,也就是说,所有函数内部的this 指针都会被赋值为thisArg,这就达到了将函数作为另外一个对象的方法运行的目的。两个方法除了thisArg 参数,都是为Function 对象传递的参数。下面的代码说明了apply 和call 方法的工作方式:"(上面这段抄自<<征服ajax>>电子书,如有版权纠纷,请联系电子书作者,与本人无关)
Code
function myFuncOne() {
this.p = "myFuncOne-";
this.A = function(arg) {
alert(this.p + arg);
}
}
function myFuncTwo() {
this.p = "myFuncTwo-";
this.B = function(arg) {
alert(this.p + arg);
}
}
function test() {
var obj1 = new myFuncOne();
var obj2 = new myFuncTwo();
obj1.A("testA"); //显示myFuncOne-testA
obj2.B("testB"); //显示myFuncTwo-testB
obj1.A.apply(obj2, ["testA"]); //显示myFuncTwo-testA,其中[ testA”]是仅有一个元素的数组
obj2.B.apply(obj1, ["testB"]); //显示myFuncOne-testB,其中[ testB”]是仅有一个元素的数组
obj1.A.call(obj2, "testA"); //显示myFuncTwo-testA
obj2.B.call(obj1, "testB"); //显示myFuncOne-testB
}
代码是廉价的(Code is cheap),拷贝粘贴试一下,本人机器运行通过。
函数对象还有一个与参数相关的属性length,这里看清楚了,是与“参数”相关的属性,没错,字面理解,就是参数个数,不说了,看代码:
Code
function fun1(a, b, c) {
}
function fun2(a, b) {
}
function fun3() {
}
function test() {
for (var i = 1; i < 4; i++) {
var len = eval(("fun" + i) + ".length");
alert(len);
}
// alert(fun1.length);
// alert(fun2.length);
// alert(fun3.length);
}
与length属性不同,js有一个传递给函数的隐含参数,arguments,它也有一个length属性,下篇细说从头,洗洗睡了。