成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Js apply()使用詳解

iOS122 / 411人閱讀

摘要:方法詳解我在一開始看到的函數(shù)和時非常的模糊看也看不懂最近在網(wǎng)上看到一些文章對方法和的一些示例總算是看的有點(diǎn)眉目了在這里我做如下筆記希望和大家分享如有什么不對的或者說法不明確的地方希望讀者多多提一些意見以便共同提高主要我是要解決一下幾個問題和

Js apply方法詳解
我在一開始看到j(luò)avascript的函數(shù)apply和call時,非常的模糊,看也看不懂,最近在網(wǎng)上看到一些文章對apply方法和call的一些示例,總算是看的有點(diǎn)眉目了,在這里我做如下筆記,希望和大家分享.. 如有什么不對的或者說法不明確的地方希望讀者多多提一些意見,以便共同提高..

主要我是要解決一下幾個問題:

1.apply和call的區(qū)別在哪里

2.什么情況下用apply,什么情況下用call

3.apply的其他巧妙用法(一般在什么情況下可以使用apply)

我首先從網(wǎng)上查到關(guān)于apply和call的定義,然后用示例來解釋這兩個方法的意思和如何去用.

     apply:方法能劫持另外一個對象的方法,繼承另外一個對象的屬性.

Function.apply(obj,args)方法能接收兩個參數(shù)
obj:這個對象將代替Function類里this對象
args:這個是數(shù)組,它將作為參數(shù)傳給Function(args-->arguments)

     call:和apply的意思一樣,只不過是參數(shù)列表不一樣.

Function.call(obj,[param1[,param2[,…[,paramN]]]])
obj:這個對象將代替Function類里this對象
params:這個是一個參數(shù)列表

1.apply示例:

分析: Person.apply(this,arguments);

this:在創(chuàng)建對象在這個時候代表的是student

arguments:是一個數(shù)組,也就是[“qian”,”21”,”一年級”];

也就是通俗一點(diǎn)講就是:用student去執(zhí)行Person這個類里面的內(nèi)容,在Person這個類里面存在this.name等之類的語句,這樣就將屬性創(chuàng)建到了student對象里面

2.call示例

在Studen函數(shù)里面可以將apply中修改成如下:

Person.call(this,name,age);

這樣就ok了

3.什么情況下用apply,什么情況下用call

在給對象參數(shù)的情況下,如果參數(shù)的形式是數(shù)組的時候,比如apply示例里面?zhèn)鬟f了參數(shù)arguments,這個參數(shù)是數(shù)組類型,并且在調(diào)用Person的時候參數(shù)的列表是對應(yīng)一致的(也就是Person和Student的參數(shù)列表前兩位是一致的) 就可以采用 apply , 如果我的Person的參數(shù)列表是這樣的(age,name),而Student的參數(shù)列表是(name,age,grade),這樣就可以用call來實(shí)現(xiàn)了,也就是直接指定參數(shù)列表對應(yīng)值的位置(Person.call(this,age,name,grade));

4.apply的一些其他巧妙用法

細(xì)心的人可能已經(jīng)察覺到,在我調(diào)用apply方法的時候,第一個參數(shù)是對象(this), 第二個參數(shù)是一個數(shù)組集合,

在調(diào)用Person的時候,他需要的不是一個數(shù)組,但是為什么他給我一個數(shù)組我仍然可以將數(shù)組解析為一個一個的參數(shù),

這個就是apply的一個巧妙的用處,可以將一個數(shù)組默認(rèn)的轉(zhuǎn)換為一個參數(shù)列表([param1,param2,param3] 轉(zhuǎn)換為 param1,param2,param3) 這個如果讓我們用程序來實(shí)現(xiàn)將數(shù)組的每一個項(xiàng),來裝換為參數(shù)的列表,可能都得費(fèi)一會功夫,借助apply的這點(diǎn)特性,所以就有了以下高效率的方法:

a)Math.max 可以實(shí)現(xiàn)得到數(shù)組中最大的一項(xiàng)

因?yàn)镸ath.max 參數(shù)里面不支持Math.max([param1,param2]) 也就是數(shù)組

但是它支持Math.max(param1,param2,param3…),所以可以根據(jù)剛才apply的那個特點(diǎn)來解決 var max=Math.max.apply(null,array),這樣輕易的可以得到一個數(shù)組中最大的一項(xiàng)

(apply會將一個數(shù)組裝換為一個參數(shù)接一個參數(shù)的傳遞給方法)

     這塊在調(diào)用的時候第一個參數(shù)給了一個null,這個是因?yàn)闆]有對象去調(diào)用這個方法,我只需要用這個方法幫我運(yùn)算,得到返回的結(jié)果就行,.所以直接傳遞了一個null過去

b)Math.min 可以實(shí)現(xiàn)得到數(shù)組中最小的一項(xiàng)

同樣和 max是一個思想 var min=Math.min.apply(null,array);

c)Array.prototype.push 可以實(shí)現(xiàn)兩個數(shù)組合并

同樣push方法沒有提供push一個數(shù)組,但是它提供了push(param1,param,…paramN) 所以同樣也可以通過apply來裝換一下這個數(shù)組,即:

vararr1=new Array("1","2","3");
vararr2=new Array("4","5","6");
Array.prototype.push.apply(arr1,arr2);

也可以這樣理解,arr1調(diào)用了push方法,參數(shù)是通過apply將數(shù)組裝換為參數(shù)列表的集合.

通常在什么情況下,可以使用apply類似Math.min等之類的特殊用法:

一般在目標(biāo)函數(shù)只需要n個參數(shù)列表,而不接收一個數(shù)組的形式([param1[,param2[,…[,paramN]]]]),可以通過apply的方式巧妙地解決這個問題!

5.總結(jié):

一開始我對apply 非常的不懂,最后多看了幾遍,自己多敲了幾遍代碼,才明白了中間的道理,所以,不管做什么事情,只要自己肯動腦子,肯動手敲代碼,這樣一個技術(shù)就會掌握…

還有比如第四部分得內(nèi)容,巧妙的解決了實(shí)實(shí)在在存在的問題,這個肯定不是一個初學(xué)者能想到的解決方案(這個也不是我自己想的),沒有對編程有一定認(rèn)識的不會想到這個的,還是一句話,多積累,多學(xué)習(xí),提升自己的能力和對編程思想的理解能力才是最關(guān)鍵!
參考:https://www.cnblogs.com/xiaoh...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/106080.html

相關(guān)文章

  • 前端學(xué)習(xí)筆記之jsapply()和call()方法詳解

    摘要:第二行將函數(shù)的指向一個字符串第三行將函數(shù)的指向一個數(shù)字以此類推。再舉一個例子實(shí)現(xiàn)對象繼承繼承了的屬性和方法陳安東男姓名年齡性別輸出姓名陳安東年齡性別男這樣用就實(shí)現(xiàn)了繼承用也類似 這里排版不是太好,詳情看我的簡書 經(jīng)過網(wǎng)上的大量搜索,漸漸明白了apply()和call方法的使用,為此寫一篇文章記錄一下。 定義 apply()方法: Function.apply(obj,args)obj:...

    moven_j 評論0 收藏0
  • js 中的 call / apply 方法詳解和引用類型的繼承

    摘要:也就是說當(dāng)使用后,當(dāng)前執(zhí)行上下文中的對象已被替換為,后續(xù)執(zhí)行將以所持有的狀態(tài)屬性繼續(xù)執(zhí)行。借用的方法替換的實(shí)例去調(diào)用相應(yīng)的方法。實(shí)現(xiàn)引用類型的繼承其實(shí)沒有類這一概念,我們平時使用的等嚴(yán)格來說被稱作引用類型。 call 方法:object.method.call(targetObj[, argv1, argv2, .....]) apply 方法:object.method.apply(...

    cod7ce 評論0 收藏0
  • JavaScript繼承方式詳解

    摘要:可以通過構(gòu)造函數(shù)和原型的方式模擬實(shí)現(xiàn)類的功能。原型式繼承與類式繼承類式繼承是在子類型構(gòu)造函數(shù)的內(nèi)部調(diào)用超類型的構(gòu)造函數(shù)。寄生式繼承這種繼承方式是把原型式工廠模式結(jié)合起來,目的是為了封裝創(chuàng)建的過程。 js繼承的概念 js里常用的如下兩種繼承方式: 原型鏈繼承(對象間的繼承) 類式繼承(構(gòu)造函數(shù)間的繼承) 由于js不像java那樣是真正面向?qū)ο蟮恼Z言,js是基于對象的,它沒有類的概念。...

    Yangyang 評論0 收藏0
  • JavaScript 中 this 的詳解

    摘要:作為構(gòu)造函數(shù)調(diào)用中沒有類,但是可以從構(gòu)造器中創(chuàng)建對象,并提供了運(yùn)算符來進(jìn)行調(diào)用該構(gòu)造器。構(gòu)造器的外表跟普通函數(shù)一樣,大部分的函數(shù)都可以當(dāng)做構(gòu)造器使用。如果構(gòu)造函數(shù)顯式的返回一個對象,那么則會指向該對象。 this 的指向 this 是 js 中定義的關(guān)鍵字,它自動定義于每一個函數(shù)域內(nèi),但是它的指向卻讓人很迷惑。在實(shí)際應(yīng)用中,this 的指向大致可以分為以下四種情況。 1.作為普通函數(shù)調(diào)...

    cyrils 評論0 收藏0
  • 淺析webpack源碼之入口函數(shù)webpack.js詳解(四)

    摘要:我們看到引入了對進(jìn)行分析是一個很大的文件,里面規(guī)定了我們隨便看一段這是對你輸入的規(guī)定的要求是是其實(shí)就是本下的這樣寫可以提取公用的配置,避免代碼冗余一共行,其中就占了行接下里進(jìn)入函數(shù)引入引入了,我們在搜索鏈接我們看到,在文檔里這樣的描述的用法 我們看到引入了 對webpack.js const validateSchema = require(./validateSchema); con...

    zone 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<