摘要:彈出的就是,歲。值得注意的是,和都是改變上下文中的并立即執(zhí)行這個函數(shù),方法改變了指向之后會返回一個函數(shù),可以隨時調(diào)用。和作用完全一樣,只是傳參的方式不一樣。以上,有錯希望各位大神斧正。
apply bind call
這三個方法,作用都是改變當(dāng)前使用該方法的對象的this指向。
但三個方法還是有一些區(qū)別,先說說共同點。
window.person = { name: "mice", age: "22" } var another = { name: "henry", age: "23" } function say() { alert(this.name +"",+ this.age + "歲"); }
這個時候的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í)行這個函數(shù),bind方法改變了指向之后會返回一個函數(shù),可以隨時調(diào)用。call和apply作用完全一樣,只是傳參的方式不一樣。
傳參方式:
call(thisObj,arg1,arg2...)
apply(thisObj,[obj1,obj2...])
bind(thisObj,arg1,arg2...)
知道了三者的區(qū)別,那么簡單說下這三個方法的實際作用。
比如
function fruits(){}; fruits.prototype = { color: "red", say: function(){ console.log("My color is " + this.color); } } var apple = new fruits(); apple.say();
此時會打印出My color is red
但是現(xiàn)在我們有另一個對象banana
banana = { color: "yellow" }
我們需要調(diào)用apple里的say方法,但是我們不想重新定義,
所以我們可改變apple的指向
apple.say.call(banana);
此時會打印出My color is yellow
再比如
var a = { user: "wgf", fn: function(){ console.log(this.user); } } var b = a.fn; b();
此時打印出來的是undefined
因為此時this指向的是b,b沒有user的屬性
所以此時改為
b.call(a);
就能打印出來了。
以上,有錯希望各位大神斧正。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/88814.html
摘要:運行規(guī)則根據(jù)的運作原理,我們可以看到,的值和調(diào)用棧通過哪些函數(shù)的調(diào)用運行到調(diào)用當(dāng)前函數(shù)的過程以及如何被調(diào)用有關(guān)。 1. this的誕生 假設(shè)我們有一個speak函數(shù),通過this的運行機(jī)制,當(dāng)使用不同的方法調(diào)用它時,我們可以靈活的輸出不同的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ù)略有不同,其功能完全一樣。它們的第一個參數(shù)都為將要指向的對象。 關(guān)于 this 在絕大多數(shù)情況下,函數(shù)的調(diào)用方式?jīng)Q定了this的值。this不能在執(zhí)行期間被賦值,并且在每次函數(shù)被調(diào)用時this的值也可能會不同。 全局 this window.something = ...
摘要:感謝您的閱讀如果喜歡這篇文章請點贊。它對我意義重大,它能幫助其他人看到這篇文章。對于更高級的文章,你可以在或上跟隨我。 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...
摘要:一篇簡單的探索,這個嚴(yán)格模式出來很早了,很多人都有寫過,而且官方文檔很詳細(xì)。 原文鏈接:乖小鬼的簡書 為什么想到寫這么一篇文章呢,來源在于回答一個 SG上面的問題。那么問題是這樣子的。 var a = 2; function foo(){ console.log(this.a);} foo(); 以上代碼,執(zhí)行的結(jié)果是什么?? 如果你回答是2,那么對了多少? 只能說對了一半,為什么...
閱讀 2176·2023-04-26 01:56
閱讀 3175·2021-11-18 10:02
閱讀 3154·2021-09-09 11:35
閱讀 1413·2021-09-03 10:28
閱讀 3486·2019-08-29 18:36
閱讀 2916·2019-08-29 17:14
閱讀 890·2019-08-29 16:10
閱讀 1668·2019-08-26 13:45