激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频

Javascript中call與apply的學(xué)習筆記示例

時(shí)間:2024-08-26 01:21:06 JavaScript 我要投稿
  • 相關(guān)推薦

Javascript中call與apply的學(xué)習筆記示例

  先看MDN中對于call的解釋

Javascript中call與apply的學(xué)習筆記示例

  call() 方法在使用一個(gè)指定的this值和若干個(gè)指定的參數值的前提下調用某個(gè)函數或方法.

  注:該方法的作用和 apply() 方法類(lèi)似,只有一個(gè)區別,就是call()方法接受的是若干個(gè)參數的列表,而apply()方法接受的是一個(gè)包含多個(gè)參數的數組。

  語(yǔ)法

  fun.call(thisArg[, arg1[, arg2[, ...]]])

  參數

  thisArg

  在fun函數運行時(shí)指定的this值。需要注意的是,指定的this值并不一定是該函數執行時(shí)真正的this值,如果這個(gè)函數處于非嚴格模式下,則指定為null和undefined的this值會(huì )自動(dòng)指向全局對象(瀏覽器中就是window對象),同時(shí)值為原始值(數字,字符串,布爾值)的this會(huì )指向該原始值的自動(dòng)包裝對象。

  arg1, arg2, ...

  指定的參數列表。

  MDN上的例子一開(kāi)始并不是很好理解,這里我貼出來(lái),有興趣可以自己去看看 call-Javascript

  這里的thisArg解釋為在fun運行時(shí)指定的this值,也就是說(shuō)使用了call后,fun中的this指向了thisArg?看代碼

  var p="456"; function f1(){ this.p="123"; } function f2() { console.log(this.p); } f2(); //456 f2.call(f1()); //123 f2.apply(f1()); //123

  第一次輸出是調用的全局變量,之后由于call和apply的使用,f2中的this指向了f1,因此,輸出變成了123,其實(shí)也就是f1借用了f2的方法輸出了自己的p

  這時(shí)將f1()中的this.p刪除,會(huì )輸出三個(gè)456,也就證實(shí)了當this為null或者undefined時(shí)其實(shí)指向了全局變量

  至于指向原始值是指向它的包裝對象這里,由于我理解的包裝對象都是臨時(shí)的,而且測試時(shí)只輸出了原始值的類(lèi)型而不是object,這里如何證明如果有知道的朋友希望可以和我討論下,謝謝!

  既然call可以實(shí)現一個(gè)對象借用另一個(gè)對象,不就可以實(shí)現繼承了么?看代碼

  function f1(){ this.father="father" } function f2() { f1.call(this); this.child="child"; } var test=new f2(); console.log(test.father); //father

  test中是沒(méi)有father的,由于f2()中的

  f1.call(this);

  這里的this指向的就是f2,也就是f2借用了f1的方法,其實(shí)也就實(shí)現了繼承

  下面講一下這里的參數,這里的參數是傳遞給fun的,看代碼吧

  function f1(){ this.p="123"; } function f2(x) { console.log(this.p); console.log(x); } f2.call(f1(),456); //123 //456

  先輸出123是因為f1中的p,之后的456是傳遞給f2的參數,很容易理解

  主要是注意call和apply中參數的區別

  call是一個(gè)一個(gè)傳入的,而apply是傳入的一個(gè)數組

  function f1(){ this.p="測試call"; } function f2(x,y,z) { console.log(this.p); console.log(x); console.log(y); console.log(z); } function f3(){ this.p="測試apply"; } f2.call(f1(),4,5,6); f2.call(f1(),[4,5,6]); f2.apply(f3(),[4,5,6]); f2.apply(f3(),4,5,6);

  這里可以看到結果

  第一段測試call是正確輸出

  第二段測試call由于傳入數組,所以先輸出一個(gè)數組然后兩個(gè)undefined

  第三段測試apply正確輸出

  第四段由于參數格式錯誤直接報錯

  這里的區別應該很明顯了

【Javascript中call與apply的學(xué)習筆記示例】相關(guān)文章:

JavaScript學(xué)習筆記08-24

關(guān)于數據類(lèi)型的Javascript學(xué)習筆記08-05

整理Javascript基礎語(yǔ)法學(xué)習筆記欣賞08-04

JavaScript中的with關(guān)鍵字07-24

在Java中執行JavaScript代碼07-14

Javascript中typeof 用法歸納09-27

淺談如何深入學(xué)習Javascript中的this關(guān)鍵字08-19

抽象語(yǔ)法樹(shù)在JavaScript中的應用08-18

有關(guān)javascript實(shí)現的多個(gè)層切換效果通用函數示例10-07

JavaScript中的三種對象10-24

激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频