看js的资料,随手记下一些认为实用的东东,以飨和我一样正在学习的诸位看官。
     “JavaScript 为函数对象定义了两个方法:apply 和call,它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别:
     Function.prototype.apply(thisArg,argArray); Function.prototype.call(thisArg[,arg1[,arg2…]]); 从函数原型可以看到,第一个参数都被取名为thisArg,也就是说,所有函数内部的this 指针都会被赋值为thisArg,这就达到了将函数作为另外一个对象的方法运行的目的。两个方法除了thisArg 参数,都是为Function 对象传递的参数。下面的代码说明了apply 和call 方法的工作方式:"(上面这段抄自<<征服ajax>>电子书,如有版权纠纷,请联系电子书作者,与本人无关)

 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),拷贝粘贴试一下,本人机器运行通过。javascript:函数的apply,call方法和length属性
     函数对象还有一个与参数相关的属性length,这里看清楚了,是与“参数”相关的属性,没错,字面理解,就是参数个数,不说了,看代码:

 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属性,下篇细说从头,洗洗睡了。

相关文章: