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