摘要:調(diào)用了方法,參數(shù)是通過將數(shù)組轉(zhuǎn)換為參數(shù)列表的集合通常在什么情況下,可以使用類似等之類的特殊用法一般在目標(biāo)函數(shù)只需要個(gè)參數(shù)列表,而不接收一個(gè)數(shù)組的形式,可以通過的方式巧妙地解決這個(gè)問題。
apply與call可以改變函數(shù)內(nèi)部this的指向
apply是函數(shù)對(duì)象本身身上的方法,可直接用
call也可以調(diào)用函數(shù)
例
function sum (a, b, c, d){ console.lo(a+b+c+d); console.log(this === obj) } var obj = { name: "xiaoming", age: 18, sex: "男" } sum(1,2,3,4);
毫無疑問,thid===obj肯定是false,因?yàn)檎{(diào)用函數(shù)sum是window,所以this是window,不等于obj
但是如果這樣子調(diào)用sum.call(obj,1,2,3,4);
this就是指向obj
為什么要用call呢?
因?yàn)樗膮?shù)除了接收實(shí)際參數(shù)外,還可以接收一個(gè)參數(shù)代表this
它的第一個(gè)參數(shù)就是你希望函數(shù)里面的this是誰,后面的才是實(shí)參
而apply的基本功能和call基本功能是一樣的,區(qū)別在于傳遞參數(shù)的語法不一樣
實(shí)參是需要拿數(shù)組包住
sum.apply(obj,[1,2,3,4]);
apply的一些巧妙用法
1)Math.max 可以實(shí)現(xiàn)得到數(shù)組中最大的一項(xiàng):
因?yàn)镸ath.max不支持Math.max([param1,param2])也就是數(shù)組,但是它支持Math.max(param1,param2...),所以可以根據(jù)apply的特點(diǎn)來解決 var max=Math.max.apply(null,array),這樣就輕易的可以得到一個(gè)數(shù)組中的最大項(xiàng)(apply會(huì)將一個(gè)數(shù)組轉(zhuǎn)換為一個(gè)參數(shù)接一個(gè)參數(shù)的方式傳遞給方法)
這塊在調(diào)用的時(shí)候第一個(gè)參數(shù)給了null,這是因?yàn)闆]有對(duì)象去調(diào)用這個(gè)方法,我只需要用這個(gè)方法幫我運(yùn)算,得到返回的結(jié)果就行,所以直接傳遞了一個(gè)null過去。
用這種方法也可以實(shí)現(xiàn)得到數(shù)組中的最小項(xiàng):Math.min.apply(null,array)
(2)
Array.prototype.push可以實(shí)現(xiàn)兩個(gè)數(shù)組的合并
同樣push方法沒有提供push一個(gè)數(shù)組,但是它提供了push(param1,param2...paramN),同樣也可以用apply來轉(zhuǎn)換一下這個(gè)數(shù)組,即:
var arr1=new Array("1","2","3");
var arr2=new Array("4","5","6");
Array.prototype.push.apply(arr1,arr2); //得到合并后數(shù)組的長(zhǎng)度
因?yàn)閜ush就是返回一個(gè)數(shù)組的長(zhǎng)度,也可以這樣理解。arr1調(diào)用了push方法,參數(shù)是通過apply將數(shù)組轉(zhuǎn)換為參數(shù)列表的集合
通常在什么情況下,可以使用apply類似Math.max等之類的特殊用法:
一般在目標(biāo)函數(shù)只需要n個(gè)參數(shù)列表,而不接收一個(gè)數(shù)組的形式,可以通過apply的方式巧妙地解決這個(gè)問題。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/103201.html
apply 與 call 介紹 function f1(x, y) { console.log(結(jié)果是: + (x + y) + this); } f1(10, 20); //函數(shù)的調(diào)用 // 結(jié)果是:30[object Window] // 此時(shí)的 f1 實(shí)際上是當(dāng)作對(duì)象來使用的,對(duì)象可以調(diào)用方法 f1.apply(); // 結(jié)果是:NaN[object Window] f1.ca...
摘要:的作用在中,方法和方法都是為了改變函數(shù)運(yùn)行時(shí)上下文而存在的,換句話說就是為了改變函數(shù)體內(nèi)部的指向。歡迎前端大牛糾正錯(cuò)誤,如有錯(cuò)誤我會(huì)及時(shí)改正。 寫在前面: 隔了很長(zhǎng)時(shí)間了,也不知道寫點(diǎn)什么。最近一直在研究ES6,一直想寫出來的文章能對(duì)初學(xué)者或者是在學(xué)習(xí)JS路上有所幫助的。這就是我的初衷。 call、apply的作用 在JavaScript中,call()方法和apply()方法都是為了...
摘要:的調(diào)用者,將會(huì)指向這個(gè)對(duì)象。此外,還可以擴(kuò)展自己的其他方法。的使用最后來說說。不同的是,方法的返回值是函數(shù),并且需要稍后調(diào)用,才會(huì)執(zhí)行。而和則是立即調(diào)用??偨Y(jié)和的主要作用,是改變對(duì)象的執(zhí)行上下文,并且是立即執(zhí)行的。 前言 上一篇文章 《「前端面試題系列4」this 的原理以及用法》 中,提到了 call 和 apply。 它們最主要的作用,是改變 this 的指向。在平時(shí)的工作中,除了...
摘要:具體可參考下面代碼定義到原型鏈上的方法這里沒有繼承父類中的方法張三張三太史公曰總結(jié)一下與兄弟倆的任務(wù)使用一個(gè)指定的值和若干個(gè)指定的參數(shù)值的前提下調(diào)用某個(gè)函數(shù)或方法。本篇人物小傳自此結(jié)束。 在JavaScript中,有這么倆貨,一個(gè)叫call,一個(gè)叫apply,它們倆工作幾乎一毛一樣,但是也有所區(qū)別,曾經(jīng)對(duì)這個(gè)知識(shí)點(diǎn)非常困惑,看過幾篇博客也沒搞清楚這哥倆到底打算要干個(gè)啥,直到某天仔細(xì)研究...
摘要:返回值這段在下方應(yīng)用中有詳細(xì)的示例解析?;卣{(diào)函數(shù)丟失的解決方案綁定回調(diào)函數(shù)的指向這是典型的應(yīng)用場(chǎng)景綁定指向,用做回調(diào)函數(shù)。 showImg(https://segmentfault.com/img/remote/1460000019971331?w=1024&h=680); 函數(shù)原型鏈中的 apply,call 和 bind 方法是 JavaScript 中相當(dāng)重要的概念,與 this...
摘要:使用方法調(diào)用匿名函數(shù)在下例中的循環(huán)體內(nèi),我們創(chuàng)建了一個(gè)匿名函數(shù),然后通過調(diào)用該函數(shù)的方法,將每個(gè)數(shù)組元素作為指定的值執(zhí)行了那個(gè)匿名函數(shù)。這個(gè)匿名函數(shù)的主要目的是給每個(gè)數(shù)組元素對(duì)象添加一個(gè)方法,這個(gè)方法可以打印出各元素在數(shù)組中的正確索引號(hào)。 原文:回味JS基礎(chǔ):call apply 與 bind 在JavaScript中,call、apply和bind是Function對(duì)象自帶的三個(gè)方法...
閱讀 3613·2019-08-30 12:58
閱讀 973·2019-08-29 16:37
閱讀 2881·2019-08-29 16:29
閱讀 3167·2019-08-26 12:18
閱讀 2433·2019-08-26 11:59
閱讀 3475·2019-08-23 18:27
閱讀 2853·2019-08-23 16:43
閱讀 3351·2019-08-23 15:23