中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      Javascript中call與apply的學習筆記示例

      時間:2024-08-26 01:21:06 JavaScript 我要投稿
      • 相關推薦

      Javascript中call與apply的學習筆記示例

        先看MDN中對于call的解釋

      Javascript中call與apply的學習筆記示例

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

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

        語法

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

        參數

        thisArg

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

        arg1, arg2, ...

        指定的參數列表。

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

        這里的thisArg解釋為在fun運行時指定的this值,也就是說使用了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,其實也就是f1借用了f2的方法輸出了自己的p

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

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

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

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

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

        f1.call(this);

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

        下面講一下這里的參數,這里的參數是傳遞給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是一個一個傳入的,而apply是傳入的一個數組

        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由于傳入數組,所以先輸出一個數組然后兩個undefined

        第三段測試apply正確輸出

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

        這里的區別應該很明顯了

      【Javascript中call與apply的學習筆記示例】相關文章:

      JavaScript學習筆記08-24

      關于數據類型的Javascript學習筆記08-05

      整理Javascript基礎語法學習筆記欣賞08-04

      JavaScript中的with關鍵字07-24

      在Java中執行JavaScript代碼07-14

      Javascript中typeof 用法歸納09-27

      淺談如何深入學習Javascript中的this關鍵字08-19

      抽象語法樹在JavaScript中的應用08-18

      有關javascript實現的多個層切換效果通用函數示例10-07

      JavaScript中的三種對象10-24

      主站蜘蛛池模板: 聂拉木县| 日本少妇视频一区二区三区| 精品国产一区二区三区亚洲人| 成人午夜视频在线观看高清| 青青青伊人色综合久久亚洲综合| 白玉县| 亚洲成a人片在线观看中文!!! | 大伊香蕉精品视频一区| 国产三级黄色的在线观看| 怀来县| 浦东新区| 长兴县| 剑川县| 革吉县| 什邡市| 新源县| 中文字幕乱码免费人妻av| 日韩有码中文字幕第一页| 精品亚洲一区二区三区| 久久亚洲一级av一片| 免费在线观看亚洲视频| 亚洲一级av大片在线观看| 国产精品久久久亚洲第一牛牛| 少妇高潮紧爽免费观看| 忻州市| 五寨县| 大白屁股流白浆一区二区三区| 亚洲区福利视频免费看| 美女被射视频在线观看91| 91久久国产福利自产拍| 国产熟女av一区二区三区四季| 亚洲精品AⅤ无码精品丝袜无码| 免费国产调教视频在线观看| 国产91一区二这在线播放| 亚洲av色香蕉一区二区三区精品| 日本女优中文字幕在线观看| 免费人成在线高清网站| 青草蜜桃视频在线观看| av网站入口在线免费观看| 91精品国产综合久久青草| 国产乱子伦农村xxxx|