摘要:語法參數(shù)這個(gè)對(duì)象將替代類里的對(duì)象可選在函數(shù)運(yùn)行時(shí)使用的值。如果該參數(shù)的值為或,則表示不需要傳入任何參數(shù)。更簡(jiǎn)單的講就是將和傳入函數(shù)執(zhí)行。
學(xué)了那么久前端,對(duì)apply、call這兩個(gè)函數(shù)的用法,還不是很掌握。Function.prototype.apply()
今天看了很多網(wǎng)上的文章,我總結(jié)和歸納下用法。
apply() 方法調(diào)用一個(gè)具有給定this值的函數(shù),以及作為一個(gè)數(shù)組(或類似數(shù)組對(duì)象)提供的參數(shù)。語法
func.apply(thisArg, [argsArray])參數(shù)
thisArg /// 這個(gè)對(duì)象將替代func類里的this對(duì)象
可選,在func函數(shù)運(yùn)行時(shí)使用的this值。請(qǐng)注意,this可能不是該方法看到的實(shí)際值:如果這個(gè)函數(shù)處于非嚴(yán)格模式下,則指定為 null 或 undefined 時(shí)會(huì)自動(dòng)替換為指向全局對(duì)象,原始值會(huì)被包裝。
argsArray // 數(shù)組、類數(shù)組。它將作為參數(shù)傳到func函數(shù)中
可選的。一個(gè)數(shù)組或者類數(shù)組對(duì)象,其中的數(shù)組元素將作為多帶帶的參數(shù)傳給 func 函數(shù)。如果該參數(shù)的值為 null 或 undefined,則表示不需要傳入任何參數(shù)。從ECMAScript 5 開始可以使用類數(shù)組對(duì)象。
調(diào)用有指定this值和參數(shù)的函數(shù)的結(jié)果。
示例var array=["a","b"], elem=[1,2,3]; array.push.apply(arry,elem); console.log(array) // ["a","b",1,2,3]
// 定義一個(gè)Animals function Animals(name, kind) { this.name = name this.kind = kind } // 定義一個(gè)貓 function Cat(name, kind, sex) { Animals.apply(this, arguments) console.log(this) // this.sex = sex } var HelloKitty = new Cat("Kitty","cat", "Female") console.log(HelloKitty)
最后得到的值:
這是為什么呢?Animals.apply(this, arguments)
this
表示的是當(dāng)前fn內(nèi)的this,就是Cat的this
arguments
表示的是當(dāng)前fn內(nèi)的所傳參數(shù),即"Kitty","cat", "Female"
當(dāng)參數(shù)"Kitty","cat", "Female"傳入Cat中,函數(shù)利用apply函數(shù)執(zhí)行Animals的內(nèi)容,就是將this.name =name; this.kind = kind;作用于Cat函數(shù)內(nèi)部。
更簡(jiǎn)單的講就是將this和arguments傳入Person函數(shù)執(zhí)行。
現(xiàn)在我們來做一些改變
function Animals(name, kind) { this.name = name this.kind = kind } // 定義一個(gè)貓 function Cat(name, sex, kind) { Animals.apply(this, arguments) this.sex = sex } var HelloKitty = new Cat("Kitty", "Female", "cat") console.log(HelloKitty)
我們將Cat中的sex,kind換個(gè)位置,會(huì)得到什么結(jié)果呢?
這樣就能直觀展現(xiàn)出這個(gè)過程
Animals.apply(this,["Kitty", "Female"])
然后進(jìn)行賦值
this.name = "Kitty" this.kind = "Female"
這里的this指的是Cat對(duì)象,賦值成功后,返回Cat函數(shù),進(jìn)行下一步
this.sex ="Female";
最后得到結(jié)果
{ name: "Kitty", kind: "Female", sex: "Female" }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/106033.html
摘要:第二行將函數(shù)的指向一個(gè)字符串第三行將函數(shù)的指向一個(gè)數(shù)字以此類推。再舉一個(gè)例子實(shí)現(xiàn)對(duì)象繼承繼承了的屬性和方法陳安東男姓名年齡性別輸出姓名陳安東年齡性別男這樣用就實(shí)現(xiàn)了繼承用也類似 這里排版不是太好,詳情看我的簡(jiǎn)書 經(jīng)過網(wǎng)上的大量搜索,漸漸明白了apply()和call方法的使用,為此寫一篇文章記錄一下。 定義 apply()方法: Function.apply(obj,args)obj:...
摘要:方法詳解我在一開始看到的函數(shù)和時(shí)非常的模糊看也看不懂最近在網(wǎng)上看到一些文章對(duì)方法和的一些示例總算是看的有點(diǎn)眉目了在這里我做如下筆記希望和大家分享如有什么不對(duì)的或者說法不明確的地方希望讀者多多提一些意見以便共同提高主要我是要解決一下幾個(gè)問題和 Js apply方法詳解我在一開始看到j(luò)avascript的函數(shù)apply和call時(shí),非常的模糊,看也看不懂,最近在網(wǎng)上看到一些文章對(duì)apply...
摘要:方法與代理處理程序的方法相同。使用給目標(biāo)函數(shù)傳入指定的參數(shù)。當(dāng)然,不用反射也可以讀取的值。的例子我們可以理解成是攔截了方法,然后傳入?yún)?shù),將返回值賦值給,這樣我們就能在需要讀取這個(gè)返回值的時(shí)候調(diào)用。這種代理模式和的代理有異曲同工之妙。 反射 Reflect 當(dāng)你見到一個(gè)新的API,不明白的時(shí)候,就在瀏覽器打印出來看看它的樣子。 showImg(https://segmentfault....
摘要:方法與代理處理程序的方法相同。使用給目標(biāo)函數(shù)傳入指定的參數(shù)。當(dāng)然,不用反射也可以讀取的值。的例子我們可以理解成是攔截了方法,然后傳入?yún)?shù),將返回值賦值給,這樣我們就能在需要讀取這個(gè)返回值的時(shí)候調(diào)用。這種代理模式和的代理有異曲同工之妙。 反射 Reflect 當(dāng)你見到一個(gè)新的API,不明白的時(shí)候,就在瀏覽器打印出來看看它的樣子。 showImg(https://segmentfault....
閱讀 2350·2021-09-28 09:36
閱讀 2305·2021-09-22 15:14
閱讀 3712·2019-08-30 12:47
閱讀 3081·2019-08-30 12:44
閱讀 1306·2019-08-29 17:06
閱讀 599·2019-08-29 14:12
閱讀 1049·2019-08-29 14:01
閱讀 2635·2019-08-29 12:17