apply和call用法

apply語法


func.apply(name, [array])
  • 第一個參數指定函數體內this對象的指向.
  • 第二個參數為一個帶下標的集合,可以是數組或類數組,apply方法把這個集合中的元素作為參數傳遞給被調用的函數

var func = function(a, b, c) {console.log([a, b, c]); // [1,2,3]
}
func.apply(null, [1,2,3])

call語法

  • 第一個參數:代表函數體內this指向
  • 第二個參數:數量不固定,每個參數依次傳入函數 ```javascript

```

當使用call或則apply的時候, 如果我們傳入的第一個參數是null. 函數體內的this會指向默認的宿主對象,在游覽器中則是window

var func = function( a, b, c ){alert ( this === window );    // 輸出true
};
func.apply( null, [ 1, 2, 3 ] );

但如果是在嚴格模式下,函數體內的this還是為null:


var func = function( a, b, c ){    "use strict";    alert ( this === null );     // 輸出true
}
func.apply( null, [ 1, 2, 3 ] );

有時候我們使用call或者apply的目的不在于指定this指向,而是另有用途,比如借用其他對象的方法。
那么我們可以傳入null來代替某個具體的對象:


Math.max.apply( null, [ 1, 2, 5, 3, 4 ] )    // 輸出:5

call和apply的用途


var obj1={name: '李小龍'
}
var obj2={name: '蕭薰'
}
window.name = 'window'
var getName = function(){console.log(this.name)
};
getName(); //輸出:window
getName.call(obj1); //輸出:李小龍
getName.call(obj2); //輸出:蕭薰

當執行getName.call( obj1 )這句代碼時,getName函數體內的this就指向obj1對象

this 錯誤的情況


document.getElementById( 'div1' ).onclick = function(){    
alert( this.id );            // 輸出:div1    
var func = function(){       alert ( this.id );        // 輸出:undefined    
}    
func();
};

修正this


document.getElementById( 'div1' ).onclick = function(){    
var func = function(){        alert ( this.id );        // 輸出:div1    
}    
func.call( this );
};

原文鏈接: http://www.jianshu.com/p/c942d58659c6

轉載于:https://www.cnblogs.com/lovellll/p/10109617.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/388923.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388923.shtml
英文地址,請注明出處:http://en.pswp.cn/news/388923.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

剛認識女孩說不要浪費時間_不要浪費時間尋找學習數據科學的最佳方法

剛認識女孩說不要浪費時間重點 (Top highlight)Data science train is moving, at a constantly accelerating speed, and increasing its length by adding up new coaches. Businesses want to be on the data science train to keep up with the ever-evolving technology a…

測試工具之badboy

badboy這個工具本身用處不是很大,但有個錄制腳本的功能,還是jmeter腳本,所以針對這一點很多懶人就可以通過這個錄制腳本,而不需要自己去編寫 badboy工具最近還是2016年更新的,后面也沒在更新了,官方下載地址…

hive 集成sentry

2019獨角獸企業重金招聘Python工程師標準>>> 環境 apache-hive-2.3.3-bin apache-sentry-2.1.0-bin 1 2 sentry是目前最新的版本,支持hive的最高版本為2.3.3,hive版本如果高于2.3.3,會出一些版本兼容問題[親測] hive快速安裝 wget…

word模板生成word報表文檔

主要功能為根據word模板生成word報表文檔,注意引用Interop.Word.dll;首先要生成word程序對象Word.Application app new Word.Application();根據模板文件生成新文件框架File.Copy(TemplateFile, FileName);生成documnet對象ord.Document doc new Word.Document(); 打開…

isql 測試mysql連接_[libco] 協程庫學習,測試連接 mysql

歷史原因,一直使用 libev 作為服務底層;異步框架雖然性能比較高,但新人學習和使用門檻非常高,而且串行的邏輯被打散為狀態機,這也會嚴重影響生產效率。用同步方式實現異步功能,既保證了異步性能優勢&#x…

什么是數據倉庫,何時以及為什么要考慮一個

The term “Data Warehouse” is widely used in the data analytics world, however, it’s quite common for people who are new with data analytics to ask the above question.術語“數據倉庫”在數據分析領域中被廣泛使用,但是,對于數據分析新手來…

安裝好MongoDB,但服務中沒有MongoDB服務的解決辦法

以管理員身份打開CMD,添加路徑添加服務即可 winX 然后再選Amongod -dbpath "D:\MongoDB\Server\3.6\data\db" -logpath "D:\MongoDB\Server\3.6\data\log\mongo.log" -install -serviceName "MongoDB"轉載于:https://www.cnblogs.com…

DRF數據驗證+數據存儲

1.驗證數據的自定義類 class BooksDRFt(serializers.ModelSerializer):class Meta:model Bookfields __all__#要驗證的字段author serializers.CharField(requiredFalse)#要驗證的字段name serializers.CharField(min_length2, error_messages{required: 不能為空, min_len…

mysql變量 exec_MySQL slave_exec_mode 參數說明

背景:今天無意當中看到參數slave_exec_mode,從手冊里的說明看出該參數和MySQL復制相關,是可以動態修改的變量,默認是STRICT模式(嚴格模式),可選值有IDEMPOTENT模式(冪等模式)。設置成IDEMPOTENT模式可以讓從庫避免1032…

C#word

主要功能為根據word模板生成word報表文檔,注意引用Interop.Word.dll;首先要生成word程序對象Word.Application app new Word.Application();根據模板文件生成新文件框架File.Copy(TemplateFile, FileName);生成documnet對象ord.Document doc new Word.Document(); 打開…

機器學習kaggle競賽實戰-泰坦尼克號

數據展示 首先登kaggle 下載泰坦尼克訓練相關數據 import pandas as pd import numpy as np data pd.read_csv(train.csv) print(data.shape) print(data.head) train data[:800] test data[800:] print(train.shape) print(test.shape)選擇特征 selected_features [Pcl…

上海大都會 H.A Simple Problem with Integers

題目描述 You have N integers A1, A2, ... , AN. You are asked to write a program to receive and execute two kinds of instructions: C a b means performing Ai (Ai2 mod 2018) for all Ai such that a ≤ i ≤ b.Q a b means query the sum of Aa, Aa1, ..., Ab. Note…

探索性數據分析入門_入門指南:R中的探索性數據分析

探索性數據分析入門When I started on my journey to learn data science, I read through multiple articles that stressed the importance of understanding your data. It didn’t make sense to me. I was naive enough to think that we are handed over data which we p…

用Javascript代碼實現瀏覽器菜單命令(以下代碼在 Windows XP下的瀏覽器中調試通過

每當我們看到別人網頁上的打開、打印、前進、另存為、后退、關閉本窗口、禁用右鍵等實現瀏覽器命令的鏈接,而自己苦于不能實現時,是不是感到很遺憾?是不是也想實現?如果能在網頁上能實現瀏覽器的命令,將是多么有意思的…

mysql程序設計教程_MySQL教程_編程入門教程_牛客網

MySQL 索引MySQL索引的建立對于MySQL的高效運行是很重要的,索引可以大大提高MySQL的檢索速度。打個比方,如果合理的設計且使用索引的MySQL是一輛蘭博基尼的話,那么沒有設計和使用索引的MySQL就是一個人力三輪車。拿漢語字典的目錄頁(索引)打比…

學習筆記整理之StringBuffer與StringBulider的線程安全與線程不安全

關于線程和線程不安全: 概述 編輯 如果你的代碼所在的進程中有多個線程在同時運行,而這些線程可能會同時運行這段代碼。如果每次運行結果和單線程運行的結果是一樣的,而且其他的變量的值也和預期的是一樣的,就是線程安全的。或者說…

python web應用_為您的應用選擇最佳的Python Web爬網庫

python web應用Living in today’s world, we are surrounded by different data all around us. The ability to collect and use this data in our projects is a must-have skill for every data scientist.生活在當今世界中,我們周圍遍布著不同的數據。 在我們的…

NDK-r14b + FFmpeg-release-3.4 linux下編譯FFmpeg

下載資源 官網下載完NDK14b 和 FFmpeg 下載之后,更改FFmpeg 目錄下configure問價如下: SLIBNAME_WITH_MAJOR$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF) LIB_INSTALL_EXTRA_CMD$$(RANLIB)"$(LIBDIR)/$(LIBNAME)" SLIB_INSTALL_NAME$(SLI…

C# WebBrowser自動填表與提交

C# WebBrowser自動填表與提交 默認分類 2007-04-18 15:47:17 閱讀57 評論0 字號:大中小 訂閱 要使我們的WebBrowser具有自動填表、甚至自動提交的功能,并不困難。   假設有一個最簡單的登錄頁面,輸入用戶名密碼,點“登錄”…

html中列表導航怎么和圖片對齊_HTML實戰篇:html仿百度首頁

本篇文章主要給大家介紹一下如何使用htmlcss來制作百度首頁頁面。1)制作頁面所用的知識點我們首先來分析一下百度首頁的頁面效果圖百度首頁由頭部的一個文字導航,中間的一個按鈕和一個輸入框以及下邊的文字簡介和導航組成。我們這里主要用到的知識點就是列表標簽(ul…