欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

徹底搞懂JavaScript中的apply和call方法(必看)

 更新時間:2017年09月18日 08:39:15   投稿:jingxian  
下面小編就為大家?guī)硪黄獜氐赘愣甁avaScript中的apply和call方法(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

call和apply都是為了改變某個函數(shù)運行的context上下文而存在的,即為了改變函數(shù)體內部this的指向。因為JavaScript的函數(shù)存在定義上下文和運行時上下文以及上下文是可以改變的概念。

回到目錄定義

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

其中thisArg可以為null或undefined,此時表示全局對象,更詳細見MDN:apply()、call()

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

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

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

因為在JavaScript中,某個函數(shù)的參數(shù)數(shù)量是不固定的,當你的參數(shù)明確知道數(shù)量時,用call,而不確定的時候用apply,然后把參數(shù)push進數(shù)組傳遞進去。當參數(shù)數(shù)量不確定時,函數(shù)內部也可以通過arguments這個數(shù)組來遍歷所有的參數(shù)。

回到目錄一個例子

在JavaScript OOP中,我們經(jīng)常會這樣定義:

funciton programmer() {
}

programmer.prototype = {
  hobby: 'programming',
  say.function() {
    alert('I love' + this.hobby);
  }
}

var xiaoMing = new programmer();
xiaoMing.say();

此時如果我們有一個設計妹子對象xiaoHua = {hobby: 'designing'};我們不想對它重新定義say方法,那么我們可以通過call或apply使用xiaoMing的say方法:xiaoMing.say.call(xiaoHua)。

由此可看出,call和apply都是為了動態(tài)改變this而出現(xiàn)的,當一個object沒有某個方法或屬性時,但是其他的對象有,則可以借助call或apply來使用其他對象的方法來操作。

obj.call(thisObj, arg1, arg2, ...);
obj.apply(thisObj, [arg1, arg2, ...]);

兩者都是把obj(即this)綁定到thisObj,這時候thisObj具備(或繼承)了obj的屬性和方法

其中比較常見的,通過document.getElementByTagName選擇的節(jié)點是一種類數(shù)組,它不能應用Array下的push,pop等方法。但我們可以通過:

var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*"));

Array.prototype.slice.call能所有具有l(wèi)ength屬性的對象轉為數(shù)組,這樣domNodes就可以應用Array下的所有方法了。

以上這篇徹底搞懂JavaScript中的apply和call方法(必看)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • uni-app做微信小程序的分包處理方法

    uni-app做微信小程序的分包處理方法

    分包指的是把一個完整的小程序項目,按照不同的需求劃分為不同的子包,在構建時打包成不同的分包,用戶在瀏覽時按需加載,這篇文章主要介紹了uni-app做微信小程序的分包處理,需要的朋友可以參考下
    2023-02-02
  • 利用canvas實現(xiàn)的加載動畫效果實例代碼

    利用canvas實現(xiàn)的加載動畫效果實例代碼

    之前看到一個Android的加載效果不錯,一直想自己動手做一個,正好這段時間重溫了一個Canvas,所以就嘗試了一下。下面這篇文章主要給大家介紹了關于利用canvas實現(xiàn)加載效果的相關資料,需要的朋友可以參考下。
    2017-07-07
  • npm script和package-lock.json使用示例詳解

    npm script和package-lock.json使用示例詳解

    這篇文章主要為大家介紹了npm script和package-lock.json使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 改進 JavaScript 和 Rust 的互操作性并深入認識 wasm-bindgen 組件

    改進 JavaScript 和 Rust 的互操作性并深入認識 wasm-bindgen 組件

    這篇文章主要介紹了改進 JavaScript 和 Rust 的互操作性并深入認識 wasm-bindgen 組件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Web程序員必備的7個JavaScript函數(shù)

    Web程序員必備的7個JavaScript函數(shù)

    這篇文章主要為大家詳細介紹了Web程序員必備的7個JavaScript函數(shù),教會大家如何靈活運用JavaScript函數(shù),感興趣的小伙伴們可以參考一下
    2016-06-06
  • js綜合應用實例簡單的表格統(tǒng)計

    js綜合應用實例簡單的表格統(tǒng)計

    在做調查問卷的過程中,遇到一個表格的統(tǒng)計問題,一個需要用到js方面的綜合知識,感覺還不錯所以記錄下來與大家分享,感興趣的朋友可以了解下
    2013-09-09
  • 微信小程序 配置頂部導航條標題顏色的實現(xiàn)方法

    微信小程序 配置頂部導航條標題顏色的實現(xiàn)方法

    這篇文章主要介紹了微信小程序 配置頂部導航條標題顏色的實現(xiàn)方法的相關資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • Javascript中異步等待的深入理解

    Javascript中異步等待的深入理解

    Async / Await是人們期待已久的JavaScript功能,它使使用異步功能更加有趣和易于理解。這篇文章主要給大家介紹了關于Javascript中異步等待的相關資料,需要的朋友可以參考下
    2021-05-05
  • mui 打開新窗口的方式總結及注意事項

    mui 打開新窗口的方式總結及注意事項

    這篇文章主要介紹了mui 打開新窗口的方式總結及注意事項,需要的朋友可以參考下
    2017-08-08
  • Layui數(shù)據(jù)表格跳轉到指定頁的實現(xiàn)方法

    Layui數(shù)據(jù)表格跳轉到指定頁的實現(xiàn)方法

    今天小編就為大家分享一篇Layui數(shù)據(jù)表格跳轉到指定頁的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09

最新評論