最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

全面解析JavaScript中apply和call以及bind(推薦)

 更新時間:2016年06月15日 10:28:43   作者:2778085001  
在javascript中apply、call和bind是三兄弟,很好的搭檔,下面小編給大家全面解析JavaScript中apply和call以及bind的相關知識,感興趣的朋友一起學習吧

函數(shù)調(diào)用方法

在談論JavaScript中apply、call和bind這三兄弟之前,我想先說下,函數(shù)的調(diào)用方式有哪些:

•作為函數(shù)

•作為方法

•作為構造函數(shù)

•通過它們的call()和apply()方法間接調(diào)用

前面的三種調(diào)用方法,我們都知道且不在這篇文章的討論范圍內(nèi),就不說了。

下面我們來說說這第四種調(diào)用方法

通過call()和apply()間接調(diào)用

其實,我們可以將這兩個函數(shù)看做是某個對象的方法,通過調(diào)用方法的方式來間接調(diào)用函數(shù):

function f(){}
f.call(o);
f.apply(o); 

call()和apply()的第一個參數(shù)是要調(diào)用函數(shù)的母對象,它是調(diào)用上下文,在函數(shù)體內(nèi)通過this來獲得對它的引用。

那么他們是一樣的,還是有區(qū)別的,還有bind方法呢?君莫急,下面詳細的解析他們?nèi)叩膮^(qū)別和聯(lián)系。

call()

call()方法給調(diào)用它的方法指定特定的this指針(習慣用語,不要和我糾結(jié)它的正確性)和參數(shù)。例如有這么一個函數(shù):

var fn = function (arg1, arg2) {
console.log(this, arg1, arg2); 
} 

我來調(diào)用它:

fn.call(null, 'Skylor', 'min'); //1
fn.call(undefined, 'Skylor', 'min'); //2
var fx = function() {}
fn.call(fx, 'Skylor', 'min'); //3 

這三個call方法的返回值是什么呢?不廢話,請看:

1. null "Skylor" "min"
2. undefined "Skylor" "min"
3. fx "Skylor" "min" 

真的是這樣嗎,機智的你,去瀏覽器控制臺小試了一下,我去,你這坑貨,不是這樣的:

chrome
1. Window "Skylor" "min"
2. Window "Skylor" "min"
3. fx "Skylor" "min" 

好吧,你機智。但這已經(jīng)很好的說明了call方法了。(window很高級,微軟偷笑中...)

我們注意到call方法,第一個參數(shù)是指定this指針,后面每個參數(shù)指定需要的參數(shù),注意我用的是“每個”,這意味著你需要幾個參數(shù)就要想調(diào)用函數(shù)那樣,一個個參數(shù)寫進去。

apply()

apply()是call()的兄弟啊,其他地方長的都一樣,都是男的,就一個地方不一樣。先看例子:

fn.apply(null, ['Skylor', 'min']); //1
fn.apply(fx, ['Skylor', 'min']); //2 

哥們,你是不是寫錯了,多了個中括號啊。不,不,不,這就是他和call長的不一樣的地方,它的第二個參數(shù)是個需要的參數(shù)Array。

bind()

bind()嘛,他們?nèi)齻€不是仨兄弟嘛,,這個我懂,blabla....不不不,它是和apply、call結(jié)拜的兄弟,不是親兄弟。

當然,bind方法也是允許你指定this指針,但是它不是調(diào)用函數(shù),而是返回一個(或者說是拷貝)調(diào)用它的函數(shù)的函數(shù),并給這個函數(shù)指定特定的this指針和參數(shù)。慣例,例子說明一切:

var fnbound = fn.bind(null, 'Skylor', 'min'); 

這時,fnbound是一個函數(shù),一個this指向null,參數(shù)為['Skylor', 'min']的另一個函數(shù)。調(diào)用之:

fnbound();

結(jié)果:

null, 'Skylor', 'min'

不要和我糾結(jié)Window的事了。。。。。

bind和其他兩個兄弟不一樣的地方,是,它不是調(diào)用函數(shù),而是返回一個新的函數(shù),同樣,它也是指定this指針和參數(shù)的,指定參數(shù)的方式和call一樣,是一個一個來的。

最后來一個例子唄:

var shoppingCart = (function(){
var _calculatePrice = function () {
return this.price * this.amount;
};
return {
calculatePrice : _calculatePrice
}
})();
var goods = {
name : ‘hammer',
price: 199,
amount : 2
};
shoppingCart.calculatePrice.call(goods); 

到此結(jié)束。!

以上所述是小編給大家介紹的JavaScript中apply和call以及bind(推薦)的全部內(nèi)容,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • JavaScript如何實現(xiàn)元素全排列實例代碼

    JavaScript如何實現(xiàn)元素全排列實例代碼

    這篇文章主要給大家介紹了關于JavaScript如何實現(xiàn)元素全排列的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用JavaScript具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05
  • js實現(xiàn)YouKu的漂亮搜索框效果

    js實現(xiàn)YouKu的漂亮搜索框效果

    這篇文章主要介紹了js實現(xiàn)YouKu的漂亮搜索框效果的方法,通過javascript結(jié)合鼠標事件與頁面樣式實現(xiàn)漂亮的搜索框效果,非常具有實用價值,需要的朋友可以參考下
    2015-08-08
  • ES6中Array.includes()函數(shù)的用法

    ES6中Array.includes()函數(shù)的用法

    這篇文章主要介紹了ES6中Array.includes()函數(shù)的用法,需要的朋友可以參考下
    2017-09-09
  • 易被忽視的js事件問題總結(jié)

    易被忽視的js事件問題總結(jié)

    這篇文章主要為大家詳細介紹了易被忽視的js事件問題,包括跨平臺事件、冒泡中target和currentTarget的區(qū)別,感興趣的朋友可以參考一下
    2016-05-05
  • JS封裝的選項卡TAB切換效果示例

    JS封裝的選項卡TAB切換效果示例

    這篇文章主要介紹了JS封裝的選項卡TAB切換效果,結(jié)合實例形式分析了javascript響應鼠標事件動態(tài)操作頁面元素屬性實現(xiàn)tab切換的相關技巧,需要的朋友可以參考下
    2016-09-09
  • javascript中的注釋使用與注意事項小結(jié)

    javascript中的注釋使用與注意事項小結(jié)

    在javascript中有兩種注釋方式,單行注釋與多行注釋。
    2011-09-09
  • 服務端預渲染之Nuxt(使用篇)

    服務端預渲染之Nuxt(使用篇)

    這篇文章主要介紹了服務端預渲染之Nuxt(使用篇),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • element select下拉框編輯時回顯已經(jīng)刪除的數(shù)據(jù)操作代碼

    element select下拉框編輯時回顯已經(jīng)刪除的數(shù)據(jù)操作代碼

    今天做項目遇到一個棘手的問題,關于element select下拉框編輯時回顯問題,下面小編通過實例代碼介紹element select下拉框編輯時回顯已經(jīng)刪除的數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • javascript實現(xiàn)貪吃蛇游戲(娛樂版)

    javascript實現(xiàn)貪吃蛇游戲(娛樂版)

    這篇文章主要為大家詳細介紹了javascript實現(xiàn)貪吃蛇,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • JavaScript實現(xiàn)讀取條碼中的二進制數(shù)據(jù)

    JavaScript實現(xiàn)讀取條碼中的二進制數(shù)據(jù)

    條碼是一種以機器可讀的可視形式表示數(shù)據(jù)的方法,我們可以從條碼獲取二進制數(shù)據(jù),并通過不同方法去讀碼,下面我們就來看看如何實現(xiàn)讀取條碼中的二進制數(shù)據(jù)吧
    2024-03-03

最新評論

中江县| 永丰县| 台东市| 兴业县| 大同县| 沐川县| 济源市| 章丘市| 东安县| 洱源县| 措勤县| 大同县| 紫阳县| 潞西市| 紫金县| 涟源市| 漠河县| 青海省| 曲靖市| 江油市| 虎林市| 西乡县| 县级市| 三江| 澳门| 遂宁市| 鄄城县| 东乌珠穆沁旗| 西城区| 阿坝县| 万年县| 和平区| 稻城县| 台南县| 惠来县| 寻甸| 尤溪县| 垫江县| 白朗县| 东光县| 长寿区|