欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript中的apply()方法和call()方法使用介紹

 更新時(shí)間:2012年07月25日 17:00:12   作者:  
我們發(fā)現(xiàn)apply()和call()的真正用武之地是能夠擴(kuò)充函數(shù)賴以運(yùn)行的作用域,如果我們想用傳統(tǒng)的方法實(shí)現(xiàn)
1、每個(gè)函數(shù)都包含兩個(gè)非繼承而來(lái)的方法:apply()和call()。
2、他們的用途相同,都是在特定的作用域中調(diào)用函數(shù)。
3、接收參數(shù)方面不同,apply()接收兩個(gè)參數(shù),一個(gè)是函數(shù)運(yùn)行的作用域(this),另一個(gè)是參數(shù)數(shù)組。
call()方法第一個(gè)參數(shù)與apply()方法相同,但傳遞給函數(shù)的參數(shù)必須列舉出來(lái)。
  例1:
復(fù)制代碼 代碼如下:

window.firstName = "diz";
window.lastName = "song";
var myObject = { firstName: "my", lastName: "Object" };
function HelloName() {
  console.log("Hello " + this.firstName + " " + this.lastName, " glad to meet you!");
}
HelloName.call(window); //huo .call(this);
HelloName.call(myObject);

  運(yùn)行結(jié)果為:
Hello diz song glad to meet you!
Hello my Object glad to meet you!
  例2:
復(fù)制代碼 代碼如下:

function sum(num1, num2) {
return num1 + num2;
}
console.log(sum.call(window, 10, 10)); //20
console.log(sum.apply(window,[10,20])); //30

  分析:在例1中,我們發(fā)現(xiàn)apply()和call()的真正用武之地是能夠擴(kuò)充函數(shù)賴以運(yùn)行的作用域,如果我們想用傳統(tǒng)的方法實(shí)現(xiàn),請(qǐng)見下面的代碼:
復(fù)制代碼 代碼如下:

window.firstName = "diz";
window.lastName = "song";
var myObject = { firstName: "my", lastName: "Object" };
function HelloName() {
console.log("Hello " + this.firstName + " " + this.lastName, " glad to meet you!");
}
HelloName(); //Hello diz song glad to meet you!
myObject.HelloName = HelloName;
myObject.HelloName(); //Hello my Object glad to meet you!

  見加紅的代碼,我們發(fā)現(xiàn),要想讓HelloName()函數(shù)的作用域在對(duì)象myObject上,我們需要?jiǎng)討B(tài)創(chuàng)建myObject的HelloName屬性,此屬性作為指針指向HelloName()函數(shù),這樣,當(dāng)我們調(diào)用myObject.HelloName()時(shí),函數(shù)內(nèi)部的this變量就指向myObjecct,也就可以調(diào)用該對(duì)象的內(nèi)部其他公共屬性了。
  通過(guò)分析例2,我們可以看到call()和apply()函數(shù)的真正運(yùn)用之處,在實(shí)際項(xiàng)目中,還需要根據(jù)實(shí)際靈活加以處理!
  一個(gè)小問(wèn)題:再看一看函數(shù)中定義函數(shù)時(shí),this變量的情況
復(fù)制代碼 代碼如下:

function temp1() {
console.log(this); //Object {}
function temp2() {
console.log(this); //Window
}
temp2();
}
var Obj = {};
temp1.call(Obj); //運(yùn)行結(jié)果見上面綠色的注釋?。。。?

  執(zhí)行結(jié)果與下面的相同:
復(fù)制代碼 代碼如下:

function temp1() {
console.log(this);
temp2();
}
function temp2() {
console.log(this);
}
var Obj = {};
temp1.call(Obj);

4、bind()方法
  支持此方法的瀏覽器有IE9+、Firefox4+、Safari5.1+、Opera12+、Chrome。它是屬于ECMAScript5的方法。直接看例子:

復(fù)制代碼 代碼如下:

window.color = "red";
var o = { color: "blue" };
function sayColor(){
alert(this.color);
}
var OSayColor = sayColor.bind(o);
OSayColor(); //blue

  這里,sayColor()調(diào)用bind()方法,并傳入o對(duì)象,返回了OSayColor()函數(shù),在OSayColor()中,this的值就為o對(duì)象。

相關(guān)文章

  • js利用iframe實(shí)現(xiàn)選項(xiàng)卡效果

    js利用iframe實(shí)現(xiàn)選項(xiàng)卡效果

    這篇文章主要為大家詳細(xì)介紹了js利用iframe實(shí)現(xiàn)選項(xiàng)卡效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 淺談JS中的反柯里化( uncurrying)

    淺談JS中的反柯里化( uncurrying)

    本篇文章主要介紹了淺談JS中的反柯里化( uncurrying),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • JavaScript中Set和Map數(shù)據(jù)結(jié)構(gòu)使用場(chǎng)景詳解

    JavaScript中Set和Map數(shù)據(jù)結(jié)構(gòu)使用場(chǎng)景詳解

    這篇文章主要為大家介紹了JavaScript中Set和Map數(shù)據(jù)結(jié)構(gòu)使用場(chǎng)景詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • JS實(shí)現(xiàn)標(biāo)簽頁(yè)切換效果

    JS實(shí)現(xiàn)標(biāo)簽頁(yè)切換效果

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)標(biāo)簽頁(yè)切換效果的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • JavaScript實(shí)現(xiàn)文字跟隨鼠標(biāo)特效

    JavaScript實(shí)現(xiàn)文字跟隨鼠標(biāo)特效

    這篇文章主要介紹了JavaScript如何實(shí)現(xiàn)文字跟隨鼠標(biāo)特效,d代碼簡(jiǎn)單易操作,感興趣的朋友可以參考下
    2015-08-08
  • JS利用循環(huán)解決的一些常見問(wèn)題總結(jié)

    JS利用循環(huán)解決的一些常見問(wèn)題總結(jié)

    循環(huán)輸出問(wèn)題是面試中經(jīng)典的題目,一般會(huì)給出代碼,讓我們解釋原因,并給出若干解決方案,下面這篇文章主要給大家介紹了關(guān)于JS利用循環(huán)解決的一些常見問(wèn)題,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • bootstrap table列和表頭對(duì)不齊的解決方法

    bootstrap table列和表頭對(duì)不齊的解決方法

    這篇文章主要為大家詳細(xì)介紹了bootstrap table列和表頭對(duì)不齊的解決方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 簡(jiǎn)單實(shí)現(xiàn)js浮動(dòng)框

    簡(jiǎn)單實(shí)現(xiàn)js浮動(dòng)框

    這篇文章主要為大家詳細(xì)介紹了如何簡(jiǎn)單實(shí)現(xiàn)js浮動(dòng)框,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • JavaScript中的this關(guān)鍵字介紹與使用實(shí)例

    JavaScript中的this關(guān)鍵字介紹與使用實(shí)例

    JavaScript其實(shí)一門基于或者說(shuō)是面向?qū)ο蟮恼Z(yǔ)言,這樣的話,this這個(gè)關(guān)鍵字,在類的內(nèi)部就顯得尤為重要
    2013-06-06
  • Javascript中Cookie的獲取和保存應(yīng)用案例

    Javascript中Cookie的獲取和保存應(yīng)用案例

    這篇文章主要給大家介紹了關(guān)于Javascript中Cookie的獲取和保存應(yīng)用的相關(guān)資料,Cookie是直接存儲(chǔ)在瀏覽器中的一小串?dāng)?shù)據(jù),文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09

最新評(píng)論