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

資訊專欄INFORMATION COLUMN

函數原型中的 call 和 apply 方法的區別

tinna / 1286人閱讀

摘要:都屬于的方法它們是在引擎內在實現的,因為屬于,所以每個對象實例,也就是每個方法都有屬性。與調用參數不同不同之處在于調用函數時,參數可以使用數組要求明確列出參數。助記法的表示即數組而的表示即逗號。

call, apply都屬于Function.prototype的方法

它們是在 JavaScript 引擎內在實現的,因為屬于Function.prototype,所以每個Function對象實例,也就是每個方法都有call, apply屬性。它們的作用一樣,只是使用方式不同。

call 與 apply 調用參數不同

不同之處在于調用apply函數時,參數可以使用數組; call要求明確列出參數。

助記法: Apply 的A表示 Array, 即數組, 而 Call 的 C 表示 Comma, 即逗號。

更多請參閱MDN的文檔。

偽語法:

theFunction.apply(valueForThis, arrayOfArgs)
theFunction.call(valueForThis, arg1, arg2, ...)

從ES6開始,還有展開spread數組與該call功能一起使用的可能性,你可以在這里看到兼容性。

示例代碼:

function theFunction(name, profession) {
    console.log("My name is " + name + " and I am a " + profession +".");
}
theFunction("John", "fireman");
theFunction.apply(undefined, ["Susan", "school teacher"]);
theFunction.call(undefined, "Claude", "mathematician");
theFunction.call(undefined, ...["Matthew", "physicist"]); // 使用展開語法
搞這么復雜,直接調用函數不好嗎?

主要是為了模擬面向對象,對狀態進行封裝的同時, 不同實例可以有不同的內部狀態,如:

var module = {
  x: 42,
  getX: function() {
    return this.x;
  }
}

var unboundGetX = module.getX;
console.log(unboundGetX()); // 函數在全局范圍內調用,this=window
// 會輸出: undefined, 因為window下沒有定義x
unboundGetX.call(module) //輸出 42, 或使用 bind 也有同樣的效果
var module1 ={
   x:123,
   getX: unboundGetX  //this 變為module1
}
module1.getX() //返回123

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

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

相關文章

  • 理解 JavaScript call()/apply()/bind()

    摘要:理解文章中已經比較全面的分析了在中的指向問題,用一句話來總結就是的指向一定是在執行時決定的,指向被調用函數的對象。與和直接執行原函數不同的是,返回的是一個新函數。這個新函數包裹了原函數,并且綁定了的指向為傳入的。 理解 JavaScript this 文章中已經比較全面的分析了 this 在 JavaScript 中的指向問題,用一句話來總結就是:this 的指向一定是在執行時決定的,...

    duan199226 評論0 收藏0
  • 【JavaScript】callapply兄弟列傳

    摘要:具體可參考下面代碼定義到原型鏈上的方法這里沒有繼承父類中的方法張三張三太史公曰總結一下與兄弟倆的任務使用一個指定的值和若干個指定的參數值的前提下調用某個函數或方法。本篇人物小傳自此結束。 在JavaScript中,有這么倆貨,一個叫call,一個叫apply,它們倆工作幾乎一毛一樣,但是也有所區別,曾經對這個知識點非常困惑,看過幾篇博客也沒搞清楚這哥倆到底打算要干個啥,直到某天仔細研究...

    tuniutech 評論0 收藏0
  • 詳解call bind apply - 區別/使用場景/es6實現/es3實現

    摘要:的區別接收數組一連串參數返回一個函數的使用場景將類數組含有屬性的對象轉化為數組類數組例如通過獲取的元素含有屬性的對象具有屬性,并且可以通過下標來訪問其中的元素,但是沒有中的等方法。 call,apply,bind的區別 apply接收數組 func.apply(obj, [arus]) call一連串參數 func.call(obj, param1, param2....) bind...

    Alex 評論0 收藏0
  • 【面試篇】寒冬求職季之你必須要懂原生JS(上)

    摘要:循環可以使用的范圍包括數組和結構某些類似數組的對象對象,以及字符串。只能遍歷數組,不能中斷,返回值是修改后的數組。除了之外,等,也有同樣的問題。聲明一個只讀的常量。這在語法上,稱為暫時性死區。暫時性死區也意味著不再是一個百分百安全的操作。 互聯網寒冬之際,各大公司都縮減了HC,甚至是采取了裁員措施,在這樣的大環境之下,想要獲得一份更好的工作,必然需要付出更多的努力。 一年前,也許你搞清楚閉包...

    AlphaWatch 評論0 收藏0
  • 【面試篇】寒冬求職季之你必須要懂原生JS(上)

    摘要:只能遍歷數組,不能中斷,返回值是修改后的數組。這在語法上,稱為暫時性死區。作用域鏈無論是還是查詢,都會在當前的作用域開始查找,如果沒有找到,就會向上級作用域繼續查找目標標識符,每次上升一個作用域,一直到全局作用域為止。 互聯網寒冬之際,各大公司都縮減了HC,甚至是采取了裁員措施,在這樣的大環境之下,想要獲得一份更好的工作,必然需要付出更多的努力。 一年前,也許你搞清楚閉包,this,原...

    寵來也 評論0 收藏0

發表評論

0條評論

tinna

|高級講師

TA的文章

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