一、先來看看示例
這兩個方法的用途都在特定的作用域中呼叫函式,實際上等於設定函式體內this物件的值。
例一:
1234567
891011
1213
1415
functionbox(num1,num2)
function
sum(num1,num2)
alert(sum(10,10));
function
sum(num1,num2)
alert(sum(15,10));
例二:
1234567
891011
1213
1415
//prototype下面的方法call()var color ="紅色的";
var box =
function
saycolor()
saycolor();
//用call是實現物件冒充,冒充box,冒充window下
saycolor.call(window);//紅色,冒充window
saycolor.call(this);//紅色,this就是window
saycolor.call(box);//冒充box,作用域就在box物件裡面,所以color就是藍色的
這個例子是之前作用域理解的例子修改而成,我們可以發現當我們使用call(box)方法的
時候,saycolor()方法的執行環境已經變成了box物件裡了。
1234567
8
functionbox(num1, num2)
function
callbox(num1, num2)
alert(callbox(10,10));
二、關於call
call方法呼叫乙個物件的乙個方法,以另乙個物件替換當前物件。
call([thisobj[,arg1[, arg2[, [,.argn]]]]])引數
call 方法可以用來代替另乙個物件呼叫乙個方法。call方法可將乙個函式的物件上下文從初始的上下文改變為由 thisobj 指定的新物件。
如果沒有提供 thisobj 引數,那麼 global 物件被用作 thisobj。
示例三:
1234567
89
functionadd(a,b)
function
sub(a,b)
add.call(sub,3,1);
這個例子中的意思就是用 add 來替換 sub,add.call(sub,3,1) == add(3,1) ,所以執行結果為:alert(4);
示例四:
1234567
891011
1213
1415
16
functionclass1()
}function
class2()
var c1 = new class1();
var c2 = new class2();
c1.shownam.call(c2);
注意,call 的意思是把 c1 的方法放到c2上執行,原來c2是沒有shownam() 方法,現在是把c1 的shownam()方法放到 c2 上來執行,所以this.name 應該是 class2,執行的結果就是:alert(」class2」);
示例五:實現繼承
1234567
891011
1213
functionclass1()
}function
class2()
var c2 = new class2();
c2.showtxt("cc");
這樣 class2 就繼承class1了,class1.call(this)的意思就是使用class1物件代替this物件,那麼 class2中不就有class1的所有屬性和方法了嗎,c2物件就能夠直接呼叫class1的方法以及屬性了,執行結果就是:alert(「cc」);
示例六:實現多重繼承
1234567
891011
1213
1415
1617
1819
2021
functionclass10()
}function
class11()
}function
class2()
很簡單,使用兩個call就實現多重繼承了。當然,js的繼承還有其他方法,例如使用原型鏈,這個不屬於本文的範疇,只是在此說明call的用法。
1
func.call(func1,var1,var2,var3)
1
示例七:
12345
alert(math.max(5,8)) //8alert(math.max(5,7,9,3,1,6)) //9
var arr=[5,7,9,1]
新手理解 apply 和 call
假設我們有乙隻喵星人 const cat can run 還可以跳 包括跳牆是可以的 jump can jump 複製 同時,它還有乙個小夥伴汪星人 const dog can run 還會吠 bark bark loudly 馬戲團的?還會做算數 count a,b 複製 不難發現,貓狗各有所長....
深入理解 call 和 apply
js中乙個主要的內容就是this的指向問題.共同之處 他們都能改變this的指向,都是在特定的作用域中呼叫函式,等於設定函式體內this物件的值,以擴充函式賴以執行的作用域。一般來說,this總是指向呼叫某個方法的物件,但是使用call 和說到他們的功能,我就拿call來舉例子吧,因為他們的功能是一...
js的call 和apply 方法的理解
call 方法 通過call 我們可以使用屬於另乙個物件的方法 var person var person1 var person2 conslole.log person.fullname.call person1 bill gates 使物件person1使用物件person的fullname方...