成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

what's the deference between apply bind call?

yintaolaowanzi / 1696人閱讀

摘要:彈出的就是,歲。值得注意的是,和都是改變上下文中的并立即執(zhí)行這個(gè)函數(shù),方法改變了指向之后會(huì)返回一個(gè)函數(shù),可以隨時(shí)調(diào)用。和作用完全一樣,只是傳參的方式不一樣。以上,有錯(cuò)希望各位大神斧正。

apply bind call
這三個(gè)方法,作用都是改變當(dāng)前使用該方法的對(duì)象的this指向。
但三個(gè)方法還是有一些區(qū)別,先說(shuō)說(shuō)共同點(diǎn)。

window.person = {
    name: "mice",
    age: "22"
}
var another = {
    name: "henry",
    age: "23"
}
function say() {
    alert(this.name +"",+ this.age + "歲");
}

這個(gè)時(shí)候的this指向window,所以執(zhí)行彈出的就是mice,22歲。與say.call(window)效果一樣。

say.call(another);
或者
say.apply(another);
或者
say.bind(another)();

執(zhí)行之后this的指向就變成了another。彈出的就是henry,23歲。
值得注意的是,call和apply都是改變上下文中的this并立即執(zhí)行這個(gè)函數(shù),bind方法改變了指向之后會(huì)返回一個(gè)函數(shù),可以隨時(shí)調(diào)用。call和apply作用完全一樣,只是傳參的方式不一樣。

傳參方式:
call(thisObj,arg1,arg2...)
apply(thisObj,[obj1,obj2...])
bind(thisObj,arg1,arg2...)

知道了三者的區(qū)別,那么簡(jiǎn)單說(shuō)下這三個(gè)方法的實(shí)際作用。
比如

function fruits(){};
fruits.prototype = {
    color: "red",
    say: function(){
        console.log("My color is " + this.color);
    }
}
var apple = new fruits();
apple.say();

此時(shí)會(huì)打印出My color is red
但是現(xiàn)在我們有另一個(gè)對(duì)象banana

banana = {
    color: "yellow"
}

我們需要調(diào)用apple里的say方法,但是我們不想重新定義,
所以我們可改變apple的指向

apple.say.call(banana);

此時(shí)會(huì)打印出My color is yellow

再比如

var a = {
    user: "wgf",
    fn: function(){
        console.log(this.user);
    }
}
var b = a.fn;
b();

此時(shí)打印出來(lái)的是undefined
因?yàn)榇藭r(shí)this指向的是b,b沒(méi)有user的屬性
所以此時(shí)改為

b.call(a);

就能打印出來(lái)了。

以上,有錯(cuò)希望各位大神斧正。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/88814.html

相關(guān)文章

  • 《You Don't Know JS》閱讀理解——this

    摘要:運(yùn)行規(guī)則根據(jù)的運(yùn)作原理,我們可以看到,的值和調(diào)用棧通過(guò)哪些函數(shù)的調(diào)用運(yùn)行到調(diào)用當(dāng)前函數(shù)的過(guò)程以及如何被調(diào)用有關(guān)。 1. this的誕生 假設(shè)我們有一個(gè)speak函數(shù),通過(guò)this的運(yùn)行機(jī)制,當(dāng)使用不同的方法調(diào)用它時(shí),我們可以靈活的輸出不同的name。 var me = {name: me}; function speak() { console.log(this.name); }...

    tianren124 評(píng)論0 收藏0
  • Brief introduction of how to 'Call, Apply and

    摘要:關(guān)于在絕大多數(shù)情況下,函數(shù)的調(diào)用方式?jīng)Q定了的值。不能在執(zhí)行期間被賦值,并且在每次函數(shù)被調(diào)用時(shí)的值也可能會(huì)不同。它們除了參數(shù)略有不同,其功能完全一樣。它們的第一個(gè)參數(shù)都為將要指向的對(duì)象。 關(guān)于 this 在絕大多數(shù)情況下,函數(shù)的調(diào)用方式?jīng)Q定了this的值。this不能在執(zhí)行期間被賦值,并且在每次函數(shù)被調(diào)用時(shí)this的值也可能會(huì)不同。 全局 this window.something = ...

    incredible 評(píng)論0 收藏0
  • 【Change Detection系列一】$digest 在Angular新版本中重生

    摘要:感謝您的閱讀如果喜歡這篇文章請(qǐng)點(diǎn)贊。它對(duì)我意義重大,它能幫助其他人看到這篇文章。對(duì)于更高級(jí)的文章,你可以在或上跟隨我。 I’ve worked with Angular.js for a few years and despite the widespread criticism I think this is a fantastic framework. I’ve started w...

    legendaryedu 評(píng)論0 收藏0
  • JS '嚴(yán)格模式'

    摘要:一篇簡(jiǎn)單的探索,這個(gè)嚴(yán)格模式出來(lái)很早了,很多人都有寫(xiě)過(guò),而且官方文檔很詳細(xì)。 原文鏈接:乖小鬼的簡(jiǎn)書(shū) 為什么想到寫(xiě)這么一篇文章呢,來(lái)源在于回答一個(gè) SG上面的問(wèn)題。那么問(wèn)題是這樣子的。 var a = 2; function foo(){ console.log(this.a);} foo(); 以上代碼,執(zhí)行的結(jié)果是什么?? 如果你回答是2,那么對(duì)了多少? 只能說(shuō)對(duì)了一半,為什么...

    sunnyxd 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<