转:apply和call

mac2022-06-30  25

转自: http://bbs.51js.com/thread-59672-1-1.html apply:    方法名A.apply(对象名B, [执行A需要的参数,用数组表示]); call:    方法名A.call(对象名B, [执行A需要的参数,用逗号分隔]);   apply和call功能是: 执行某一个对象的方法A, 但在执行的时候临时把它内部的this指向一个别的对象B, 后面是执行A要用到的参数.   apply和call作用一样, 区别只不过是参数一个要用数组表示, 一个要用逗号分隔的方式表示. 看例子 function obj1() {     this.arg = 1;     this.M = function (a, b){ return this.arg + a + b;} } function obj2() {      this.arg = 2; } var k1 = new obj1(); var k2 = new obj2(); 上面定义了两个对象它们都有arg这个属性, 一个为1, 一个2, 当我们执行 k1.M(10, 20) 时, 得到31, 也就是说: k1.M(10, 20) == 31 //此时this为k1, arg为1, 这句好理解 再看语句: k1.M.apply(k2, [10, 20]) 这句意思是说: 执行k1对象的M方法, 但在执行的时候把该方法内部出现的this指向k2, 同时把10, 20这2个参数传给M. 由于k1.M在执行时,内部this指向了k2, 而k2的arg属性值为2, 因此 this.arg + a + b = 2 + 10 + 20 = 32, 也就是说: k1.M.apply(k2, [10, 20]) == 32; //因为M内部this不再指向k1, 而指向k2 要用call方法, 只需要把后面参数换成用逗号分隔的就行, 即: k1.M.call(k2, 10, 20)

转载于:https://www.cnblogs.com/Elong/archive/2008/05/20/1203396.html

最新回复(0)