国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

如何理解和熟練運用js中的call及apply

kuangcaibao / 3409人閱讀

摘要:用的比較多的,通過選擇的節點是一種類似的。它不能應用下的等方法。和都是為了改變某個函數運行時的即上下文而存在的,換句話說,就是為了改變函數體內部的指向。這些的話也就能明白它倆的用處以及它們定義。

要明白call以及apply 首先得知道他們的用法如何有什么用

    function cat() {}
        cat.prototype = {
            food: "fish",
            say: function () {
                alert("I love " + this.food);
            }
        }
        var blackCat = new cat;
        blackCat.say();

但是如果我們有一個對象whiteDog = {food:"bone"},我們不想對它重新定義say方法,那么我們可以通過call或apply用blackCat的say方法:blackCat.say.call(whiteDog);

所以,可以看出call和apply是為了動態改變this而出現的,當一個object沒有某個方法,但是其他的有,我們可以借助call或apply用其它對象的方法來操作。

用的比較多的,通過document.getElementsByTagName選擇的dom 節點是一種類似array的array。它不能應用Array下的push,pop等方法。我們可以通過:

var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*"));
這樣domNodes就可以應用Array下的所有方法了。

call 和 apply 都是為了改變某個函數運行時的 context 即上下文而存在的,換句話說,就是為了改變函數體內部 this 的指向。因為 JavaScript 的函數存在「定義時上下文」和「運行時上下文」以及「上下文是可以改變的」這樣的概念。

二者的作用完全一樣,只是接受參數的方式不太一樣。例如,有一個函數 func1 定義如下:

    var func1 = function(arg1, arg2) {};

就可以通過 func1.call(this, arg1, arg2); 或者 func1.apply(this, [arg1, arg2]); 來調用。其中 this 是你想指定的上下文,他可以任何一個 JavaScript 對象(JavaScript 中一切皆對象),call 需要把參數按順序傳遞進去,而 apply 則是把參數放在數組里。

JavaScript 中,某個函數的參數數量是不固定的,因此要說適用條件的話,當你的參數是明確知道數量時,用 call,而不確定的時候,用 apply,然后把參數 push 進數組傳遞進去。當參數數量不確定時,函數內部也可以通過 arguments 這個數組來便利所有的參數。

這些的話也就能明白它倆的用處以及它們定義。

我也是從知乎大牛的回答里面看到然后總結下來的。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/81481.html

相關文章

  • 理解JavaScript中的call,applybind方法

    摘要:輸出的作用與和一樣,都是可以改變函數運行時上下文,區別是和在調用函數之后會立即執行,而方法調用并改變函數運行時上下文后,返回一個新的函數,供我們需要時再調用。 前言 js中的call(), apply()和bind()是Function.prototype下的方法,都是用于改變函數運行時上下文,最終的返回值是你調用的方法的返回值,若該方法沒有返回值,則返回undefined。這幾個方法...

    chaosx110 評論0 收藏0
  • 從一行等式理解JS中的call, applybind

    摘要:所以,這篇文章將通過一段非常簡潔的等式,把當中一個相對較難的知識點,,和給串聯起來要理解當中的這三個關鍵字,首先得弄清楚它們是用來干嘛的。方案讓吃掉,直接消化吸收的所有能力。 關于JS當中的call,apply和bind,相信大家和我一樣,已經看過了無數篇相關的文章,都有自己的理解。所以這篇文章并非什么科普類的文章,僅僅是把我自己的理解記錄下來。 我的學習習慣,是喜歡把各種看似孤立的知...

    CarterLi 評論0 收藏0
  • VQuery-封裝自己的JQuery

    摘要:無參數當前當前文檔中其所在在位置從開始工具函數函數函數包裝器可以不用了工具函數通過類名來選取元素父級對象類名獲取到的節點數組事件添加函數需要綁定事件的對象事件類型事件觸發執行的函數標準修改下指向的問題最后選擇 VQuery-封裝自己的JQuery 標簽(空格分隔): JS 封裝自己的jQuery--vQuery vQurey選擇器 VQuery類 elements屬性,存儲選擇的元素...

    EdwardUp 評論0 收藏0
  • 一名【合格】前端工程師的自檢清單

    摘要:在他的重學前端課程中提到到現在為止,前端工程師已經成為研發體系中的重要崗位之一。大部分前端工程師的知識,其實都是來自于實踐和工作中零散的學習。一基礎前端工程師吃飯的家伙,深度廣度一樣都不能差。 開篇 前端開發是一個非常特殊的行業,它的歷史實際上不是很長,但是知識之繁雜,技術迭代速度之快是其他技術所不能比擬的。 winter在他的《重學前端》課程中提到: 到現在為止,前端工程師已經成為研...

    羅志環 評論0 收藏0
  • 一名【合格】前端工程師的自檢清單

    摘要:在他的重學前端課程中提到到現在為止,前端工程師已經成為研發體系中的重要崗位之一。大部分前端工程師的知識,其實都是來自于實踐和工作中零散的學習。一基礎前端工程師吃飯的家伙,深度廣度一樣都不能差。開篇 前端開發是一個非常特殊的行業,它的歷史實際上不是很長,但是知識之繁雜,技術迭代速度之快是其他技術所不能比擬的。 winter在他的《重學前端》課程中提到: 到現在為止,前端工程師已經成為研發體系...

    isaced 評論0 收藏0

發表評論

0條評論

kuangcaibao

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<