国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

apply和call方法定義及apply和call方法的區(qū)別

2019-11-20 11:16:32
字體:
供稿:網(wǎng)友

 如果沒接觸過動(dòng)態(tài)語言,以編譯型語言的思維方式去理解javaScript將會(huì)有種神奇而怪異的感覺,因?yàn)橐庾R上往往不可能的事偏偏就發(fā)生了,甚至覺得不可理喻.如果在學(xué)JavaScript這自由而變幻無窮的語言過程中遇到這種感覺,那么就從現(xiàn)在形始,請放下的您的”偏見”,因?yàn)檫@對您來說絕對是一片新大陸。好了,不給大家嘮嗑了,言歸正傳吧,先給大家講下apply和call方法的定義。

具體內(nèi)容如下所示:

1、方法定義

call, apply都屬于Function.prototype的一個(gè)方法,它是JavaScript引擎內(nèi)在實(shí)現(xiàn)的,因?yàn)閷儆贔unction.prototype,所以每個(gè)Function對象實(shí)例,也就是每個(gè)方法都有call, apply屬性.既然作為方法的屬性,那它們的使用就當(dāng)然是針對方法的了.這兩個(gè)方法是容易混淆的,因?yàn)樗鼈兊淖饔靡粯?只是使用方式不同.

call方法:

語法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

定義:調(diào)用一個(gè)對象的一個(gè)方法,以另一個(gè)對象替換當(dāng)前對象。

說明:

call 方法可以用來代替另一個(gè)對象調(diào)用一個(gè)方法。call 方法可將一個(gè)函數(shù)的對象上下文從初始的上下文改變?yōu)橛?thisObj 指定的新對象。

如果沒有提供 thisObj 參數(shù),那么 Global 對象被用作 thisObj。

apply方法:

語法:apply([thisObj[,argArray]])

定義:應(yīng)用某一對象的一個(gè)方法,用另一個(gè)對象替換當(dāng)前對象。

說明:

如果 argArray 不是一個(gè)有效的數(shù)組或者不是 arguments 對象,那么將導(dǎo)致一個(gè) TypeError。

如果沒有提供 argArray 和 thisObj 任何一個(gè)參數(shù),那么 Global 對象將被用作 thisObj, 并且無法被傳遞任何參數(shù)

call, apply作用就是借用別人的方法來調(diào)用,就像調(diào)用自己的一樣.

它們的不同之處:

apply:最多只能有兩個(gè)參數(shù)――新this對象和一個(gè)數(shù)組 argArray。如果給該方法傳遞多個(gè)參數(shù),則把參數(shù)都寫進(jìn)這個(gè)數(shù)組里面,當(dāng)然,即使只有一個(gè)參數(shù),也要寫進(jìn)數(shù)組里面。如果 argArray 不是一個(gè)有效的數(shù)組或者不是 arguments 對象,那么將導(dǎo)致一個(gè) TypeError。如果沒有提供 argArray 和 thisObj 任何一個(gè)參數(shù),那么 Global 對象將被用作 thisObj, 并且無法被傳遞任何參數(shù)。

call:則是直接的參數(shù)列表,主要用在js對象各方法互相調(diào)用的時(shí)候,使當(dāng)前this實(shí)例指針保持一致,或在特殊情況下需要改變this指針。如果沒有提供 thisObj 參數(shù),那么 Global 對象被用作 thisObj。

更簡單地說,apply和call功能一樣,只是傳入的參數(shù)列表形式不同:如 func.call(func1,var1,var2,var3)對應(yīng)的apply寫法為:

func.apply(func1,[var1,var2,var3])

如:

add.apply(sub,[3,1]);//add.call(sub,3,1);var a={n:1,m:2,add:function(){return this.n+this.m;}}var b={n:3,m:4}console.log(a.add.call(b));//b.n+b.m=7function Animal(){ this.name = "Animal"; this.showName = function(){ alert(this.name); } }function Cat(){ this.name = "Cat"; } var animal = new Animal(); var cat = new Cat(); //通過call或apply方法,將原本屬于Animal對象的showName()方法交給對象cat來使用了。 //輸入結(jié)果為"Cat" animal.showName.call(cat,","); animal.showName.apply(cat,[]);

以上內(nèi)容是小編給大家介紹的apply和call方法定義及apply和call方法的區(qū)別,希望大家喜歡。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 城市| 江安县| 安顺市| 安仁县| 清徐县| 洪湖市| 沭阳县| 和硕县| 长白| 濮阳县| 长治市| 普安县| 南城县| 阿合奇县| 莎车县| 克拉玛依市| 炉霍县| 长顺县| 永定县| 土默特右旗| 从化市| 伊吾县| 大方县| 公主岭市| 凉城县| 榆中县| 新邵县| 吴江市| 天全县| 文水县| 湘潭县| 紫云| 肃南| 台山市| 方城县| 车险| 湟源县| 德江县| 同德县| 桦甸市| 望谟县|