在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/數(shù)據(jù)庫  網(wǎng)絡安全  HTML/ JavaScript apply和call深入了解

JavaScript apply和call深入了解

主要是對代碼執(zhí)行有點疑問,這里就不列舉處理apply和call的用法了。代碼如下,從代碼2開始就不明白了,查看ECMAScript 標準也不明白,望能得到大神解答

代碼1

Function.call.apply(function(a){return a;}, [0,4,3]);  

執(zhí)行結果

4

代碼2

Function.call.apply({}, [0,4,3]);

執(zhí)行結果

Uncaught TypeError: Function.call.apply is not a function // chrome
TypeError: Object is not a function // safari

代碼3

Function.call.apply()

執(zhí)行結果

Uncaught TypeError: Function.call.apply is not a function // chrome
TypeError: undefined is not a function // safari

代碼4

Function.call()

執(zhí)行結果

function anonymous() {

} // safari or chrome

代碼5

var test  = Function.call;
console.log(typeof test);
test();

執(zhí)行結果

'function' // console
Uncaught TypeError: test is not a function // test();  chrome
TypeError: undefined is not a function // test(); safari
回答
編輯回答
心悲涼

代碼2:
你把Function.call當成一個function看待。這個function上調用apply方法,那么第一個參數(shù)就是this對象,而Function.call所需要的this對象必須是一個funtion,你傳遞的{},是一個空的對象,那么就要做類型轉換,也就是從{}轉換成一個function,那么肯定是會報類型轉換錯誤,所以safari的報錯是最嚴謹?shù)摹?/p>

2018年2月27日 16:16
編輯回答
只愛你

首先把 1 拆分簡化一下
Function.call.apply(function(a){return a;}, [0,4,3]);
從后往前apply改變了Function.callthisfunction(a){return a;}并給了它3個參數(shù)
Function.callthis被改變了所以 可以理解為Function被替換掉了

function(a){return a;}.call(0,4,3)

最后就是 調用 function(a){return a;} 方法 它里面的this0 有兩個參數(shù) 4,3所以會輸出4

將后面的幾個問題帶入1問題就行了

2 . {}.call(), {}沒有call方法
3 . window.call(), apply第一個參數(shù)為undefined,null非嚴格模式會自動綁定為 window,不傳為undefined,window沒有call方法
4 . Function.call(),Function是一個構造函數(shù) 這句話 沒多大用 call為空this還是window 就是 Function()
5 . window.call(), 跟3一樣 call內作用域變成window

2017年8月6日 19:06