call和apply的使用

關於這兩個方法的使用,目前就理解到這,希望能拋磚引玉。下邊代碼複製是可以直接運行的。

使用形式:

1. a.fn.call(b,agrs1,agrs2,agrs3)

2. c.fn.apply(d,[agrs1,agrs2,...agrs3])

使用理解:切換函數的上下文,達到暫時調用不屬於自己的方法的目的。

<script>function add(a,b) {return a+b;}function sub(a,b) {return a-b;}var a = add(10,11);var b = sub(20,3);console.log("a=",a,"b=",b) // a= 21 b= 17a = add.call(sub,20,3)console.log("a=",a,"b=",b) // a= 23 b= 17a = add.apply(sub,[20,3])console.log("a=",a,"b=",b) // a= 23 b= 17var c = Math.max(1,23,4,54,65,76);console.log("c=",c) // c = 76var d = [1,23,4,54,65,76]var e = Math.max.apply(Math,d)console.log("e=",e) // e = 76function Obj1() {this.name = "obj1";this.age = "12";this.fn1 = function () {console.log("name_1",this.name,"age_1",this.age);}}function Obj2() {this.name = "obj2";this.age = "22";this.fn2 = function () {console.log("name_2",this.name,"age_2",this.age);}}var obj1 = new Obj1(); Obj2.prototype = obj1;var obj2 = new Obj2();obj1.fn1(); // name_1 obj1 age_1 12obj2.fn2(); // name_2 obj2 age_2 22obj1.fn1.call(obj2); // name_1 obj2 age_1 22obj2.fn1(); // name_1 obj2 age_1 22</script>

Advertisements

Advertisements

你可能會喜歡