摘要:彈出的就是,歲。值得注意的是,和都是改變上下文中的并立即執(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
摘要:運(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); }...
摘要:關(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 = ...
摘要:感謝您的閱讀如果喜歡這篇文章請(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...
摘要:一篇簡(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ì)了一半,為什么...
閱讀 1951·2023-04-26 01:56
閱讀 3122·2021-11-18 10:02
閱讀 3074·2021-09-09 11:35
閱讀 1305·2021-09-03 10:28
閱讀 3429·2019-08-29 18:36
閱讀 2859·2019-08-29 17:14
閱讀 841·2019-08-29 16:10
閱讀 1624·2019-08-26 13:45