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