<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Javascript調用函數方法的幾種方式介紹_javascript技巧

        來源:懂視網 責編:小采 時間:2020-11-27 21:35:52
        文檔

        Javascript調用函數方法的幾種方式介紹_javascript技巧

        Javascript調用函數方法的幾種方式介紹_javascript技巧:javascript語法靈活,同一個功能有五六種實現方式并不罕見,然后再加上有些反人類的原型繼承和異步特性,就更讓人一頭霧水了。我經常搞不清楚call,apply之間的區別,今天就記錄一下,以免再忘了。 在javascript中,方法可以通過以下幾種方式執行: 1.fu
        推薦度:
        導讀Javascript調用函數方法的幾種方式介紹_javascript技巧:javascript語法靈活,同一個功能有五六種實現方式并不罕見,然后再加上有些反人類的原型繼承和異步特性,就更讓人一頭霧水了。我經常搞不清楚call,apply之間的區別,今天就記錄一下,以免再忘了。 在javascript中,方法可以通過以下幾種方式執行: 1.fu

        javascript語法靈活,同一個功能有五六種實現方式并不罕見,然后再加上有些反人類的原型繼承和異步特性,就更讓人一頭霧水了。我經常搞不清楚call,apply之間的區別,今天就記錄一下,以免再忘了。

        在javascript中,方法可以通過以下幾種方式執行:

        1.func(),這是最直接最常見的調用方式,也符合一般人的思維邏輯,但是在某些情況下有一些不足,下面會解釋。

        2.(function(arg){})(window),匿名方法調用,在構造命名空間時比較有用,后面的括號中的參數與匿名方法中的入參一一對應。

        3.func.bind(sth)(),mozilla手冊中提到bind是在ECMA-262 5th Edition中新增的一個特性,這里單獨列出來作為一種調用方式是因為它彌補了直接調用中不能綁定作用域的缺陷。

        4.func.call(),這是第二種調用方式,每個方法的原型中都定義了call方法,用來執行當前方法。

        5.func.apply(),call的雙胞胎兄弟。

        func()

        這是最常見的調用方式,在任何語言中隨處可見。func(x, y)可以傳入不同的參數。在某些語言,例如php,java中,這種調用足以解決一切問題。但是javascript是一門函數式語言,閉包的概念和一個奇怪的關鍵詞this決定了這種調用方式的不足。this應該可以解釋為當前代碼段的作用域,會隨著代碼執行到不同的片段而改變,但是某些情況下我們不希望這個this被改變,例如綁定在某些dom上的事件,我們肯定不希望他們被調用的時候this被轉移到了window對象上,但有時候確實如此,再比如下面的代碼。
        代碼如下:
        var a ={};
        var func = function(x) {
        console.log(this);
        };
        a.onclick = function() {
        var x = 100;
        func(x);
        };
        a.onclick();

        可以把a想象成頁面中的一個鏈接,由于我們只是想將定義好的方法綁定到onclick事件上,而不是立刻調用它,而且這個方法擁有一個參數,所以我們需要用一個匿名方法將他包起來傳遞給a的onclick事件。這樣就有了一個問題,func中的this變成了全局對象window,顯然我們并不希望如此。這個時候,使用func()這種直接調用的方式就不行了,于是我們需要將func外的this綁定到func方法上。于是就有了bind,call,apply方法。

        bind

        bind的目的非常簡單,返回一個綁定了this對象的相同方法。上面的代碼修改一行就可以實現綁定this在a對象上目的。
        代碼如下:
        var a ={};
        var func = function(x) {
        console.log(this);
        };
        a.onclick = function() {
        var x = 100;
        func.bind(this)(x); // bind here
        };
        a.onclick();

        這樣,onclick事件的this就不會像無頭蒼蠅一樣到處亂跑啦。

        call & apply

        call和apply要放在一起講,因為他們實在太像了。他們都支持多參數,而且第一個參數都是即將綁定的this對象,第二個參數則是他們的區別所在,call使用獨立的參數作為調用方法的入參,apply使用一個數組作為入參。有的時候我們并不是不想改變this對象,而是想人為的將他綁定到別的對象上,這個時候call和apply是很好用的。(并不是說不能用bind,不過貌似bind出現的比較晚,可能瀏覽器兼容性不好)。舉個栗子:
        代碼如下:
        a = {
        func: function() {
        this.x += 1;
        },
        x: 0
        };
        b = {
        a: a,
        x: 20
        };
        for(var i = 0; i < 10; i++){
        b.a.func();
        }
        console.log(a.x);
        console.log(b.x);

        上面的a和b對象中都有x,我們希望func能針對性的修改對應的x,但是直接調用只可能修改func作用域中的x,也就是a.x。修改一下代碼,就可以實現修改b.x目的
        代碼如下:
        a = {
        func: function() {
        this.x += 1;
        },
        x: 0
        };
        b = {
        a: a,
        x: 20
        };
        for(var i = 0; i < 10; i++){
        b.a.func.call(b); // bind this to b
        }
        console.log(a.x);
        console.log(b.x);

        這個栗子舉得不好,有點牽強附會,而且這是一種很容易讓人迷惑的代碼風格,有適用的場景,但不是處處都可用。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Javascript調用函數方法的幾種方式介紹_javascript技巧

        Javascript調用函數方法的幾種方式介紹_javascript技巧:javascript語法靈活,同一個功能有五六種實現方式并不罕見,然后再加上有些反人類的原型繼承和異步特性,就更讓人一頭霧水了。我經常搞不清楚call,apply之間的區別,今天就記錄一下,以免再忘了。 在javascript中,方法可以通過以下幾種方式執行: 1.fu
        推薦度:
        標簽: 方法 使用 方式
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 嘿嘿嘿视频免费网站在线观看| 免费观看一级毛片| 日韩人妻无码精品久久免费一| 免费一级毛片一级毛片aa| 欧美亚洲精品一区二区| 白白国产永久免费视频| 亚洲精品国产av成拍色拍| 国产色爽免费视频| 黄色a级片免费看| 亚洲一区爱区精品无码| 久久久WWW免费人成精品| 久久精品国产亚洲网站| 亚洲人成色在线观看| 免费无遮挡无码永久视频| 日韩精品亚洲人成在线观看| 人与动性xxxxx免费| 免费激情视频网站| 婷婷亚洲综合五月天小说在线| 免费精品国产自产拍在线观看图片| 亚洲人成影院在线无码观看| 精品久久久久久无码免费| 国产亚洲精品资源在线26u| 特级无码毛片免费视频尤物| 亚洲伊人久久大香线蕉影院| 一本大道一卡二大卡三卡免费| 亚洲另类激情综合偷自拍图| 亚洲精品视频免费看| 精品亚洲国产成人av| 亚洲色成人WWW永久网站| 2019中文字幕免费电影在线播放| 亚洲精品中文字幕| 亚洲一区爱区精品无码| 中文字幕无码免费久久99| 美女视频黄频a免费观看| 亚洲AV综合色区无码另类小说| 2022免费国产精品福利在线| 亚洲精品国产精品乱码在线观看| 亚欧在线精品免费观看一区| 亚洲欧美日韩综合久久久| 精品亚洲一区二区| 在线播放高清国语自产拍免费|