call/apply以及this指向的理解

来源:https://www.cnblogs.com/yangshifu/archive/2018/10/09/9761388.html
-Advertisement-
Play Games

javascript是面向對象的語言,Function也是一種對象,有自己的屬性和方法。call和apply就是js函數自帶方法,掛在Fucntion.prototype上。 一般調用某函數時,直接“函數名(參數)”的寫法即可,函數內部的this指向函數的調用者。 call和apply的作用是給函數 ...


  javascript是面向對象的語言,Function也是一種對象,有自己的屬性和方法。call和apply就是js函數自帶方法,掛在Fucntion.prototype上。

  一般調用某函數時,直接“函數名(參數)”的寫法即可,函數內部的this指向函數的調用者。

function add(a,b){
    console.log(this);
    return a+b;
}
add(1,2)   // 預設window調用,this指向window

var math = {
    add:function(a,b){
        console.log(this);
        return a+b;
    }
}
math.add(1,2)  // this指向math

  call和apply的作用是給函數重新指定調用者,指定this的指向:

var name = "WINDOW";
var someone = {
    name: "yource"
};

/** 一般寫法 **/
function greet1(person) {
    var reply = "Hello, " + person.name;
    console.log(reply)
}

greet1(someone);  // Hello, yource

/** 使用call/apply **/
function greet2() {
    var reply = "Hello, " + this.name;
    console.log(reply)
}

greet2();  // Hello, WINDOW
greet2.call(someone);   // Hello, yource
greet2.apply(someone);  // Hello, yource

  call和apply的不同之處僅在於提供參數的方式:call使用一組參數列表,apply使用參數數組。

/*apply()方法*/
function.apply(thisObj[, argArray])

/*call()方法*/
function.call(thisObj[, arg1[, arg2[, [,...argN]]]]);

  apply最多只能有兩個參數:調用者thisObj和一個數組argArray。call可以接受多個參數,第一個參數與apply一樣,後面則是一串參數列表。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作者:天山老妖S 鏈接:http://blog.51cto.com/9291927 一、字元集與編碼 1、字元集簡介 字元(Character)是各種文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。字元集(Character set)是多個字元的集合,字元集種類較多,每個字元集包含的字 ...
  • 前面在介紹列表視圖和網格視圖時,它們的適配器代碼都存在視圖持有者ViewHolder,因為Android對列表類視圖提供了回收機制,如果某些列表項在屏幕上看不到了,則系統會自動回收相應的視圖對象。隨著用戶的下拉或者上拉手勢,已經被回收的列表項要重新載入到界面上,倘若每次載入都得從頭創建視圖對象,勢必 ...
  • 下麵舉Android的Browser源碼通過git保存到github上 首先在github.com官網new repository一個倉庫 在Repository name哪裡填入Browser然後創建 這時候會生成一個地址,這個就是你的倉庫地址。 例如我的:https://github.com/g ...
  • How to get out of Fast Factory Boot Mode(FFBM). ...
  • ListView現在已經很少被使用,但還是在這裡列出來說一下,有時候我們僅僅需要改變listView的某個Item,如果調用adapter的notifyDataSetChanged()方法效率不高,並且可能會出現內容閃動,那麼我們怎麼刷新某一個特定的item呢? 在這裡我們以刷新第一個item為例, ...
  • 本文主要介紹Flutter佈局中的LimitedBox、Offstage、OverflowBox、SizedBox四種控制項,詳細介紹了其佈局行為以及使用場景,並對源碼進行了分析。 ...
  • 慶祝 2018 國慶,製作了一個 的種子下載器。爬取頁面,根據頁面的鏈接,破解另外一個網站,下載種子文件,同時使用 模塊提高爬蟲的併發量。項目比較簡單,爬取頁面沒有使用任何爬蟲框架。 的安裝請看我的另外一篇文章, "Node.js 的多版本安裝" 。 項目初始化 新建一個文件夾 ,在該文件夾下打開命 ...
  • 今天面試的時候被問到一個問題,是關於 JS 非同步的。當時我腦海中閃過了一個單線程的概念,但卻沒有把真正的原理闡述清楚。所以回來特意重新回顧了前面單線程和非同步相關的一些知識點。 雖然之前學習的時候也接觸了單線程模型相關的東西,但當時理解得並不是很清楚和明白。所以這道面試題也沒有給出一語中的的答案。重新 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...