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