摘要:前言中的重中之重,也是在面試中被問得最多的問題,在這里到底是什么我也時常疑惑于此,特用此文來整理思路理解并方便日后回顧。是什么看調(diào)用并轉(zhuǎn)換例子是看調(diào)用,是全局定義函數(shù),掛載在對象上,所以是。
前言
JS中的重中之重,也是在面試中被問得最多的問題,在這里this到底是什么?我也時常疑惑于此,特用此文來整理思路理解并方便日后回顧。
函數(shù)的調(diào)用JS(ES5)里面有三種函數(shù)調(diào)用形式:
func(p1, p2) //等價于func.call(undefined, p1, p2) obj.child.method(p1, p2) //等價于obj.child.method.call(obj.child, p1, p2) func.call(context, p1, p2)
把所有的調(diào)用轉(zhuǎn)換成call的形式后,this指的就是call后面的第一個參數(shù)。
特別注意,全局定義的函數(shù)轉(zhuǎn)換成call的形式后,雖然第一個參數(shù)為undefined,但是由于全局定義的函數(shù)都是掛載到window/global對象上的,所以this會指向window/global。
看調(diào)用并轉(zhuǎn)換
例子1
function showName(){ console.log(this); //this是window } showName();//showName.call(undefined)
看調(diào)用,showName是全局定義函數(shù),掛載在window對象上,所以this是window。
例子2
var name="hello window!"; function testName () { var name="hello this!"; console.log(this.name); } testName();//testName.call(undefined)
為什么log出來的不是"hello this!"而是"hello window!"呢?
同樣,testName也是掛載在window上的,所以testName函數(shù)在調(diào)用時this是window,
所以打出來的自然是window.name,也就是全局變量name的值"hello window!"而不是"hello this!"。
例子3
var obj={ a:"哈哈哈", b:function(){ var a="嘿嘿嘿"; console.log(this.a);//"哈哈哈" } }; obj.b();//obj.b.call(obj)
那么以上代碼為什么會打出"哈哈哈"呢?
顯然,這里的this是指obj,也就是會去找obj.a,所以打出的就是"哈哈哈"啦。
fn() this=>window/global obj.fn() this=>obj fn.call(xxx) this=>xxx fn.apply(xxx) this=>xxx fn.bind(xxx) this=>xxx new Fn() this=>新的對象 fn = () =>{} this=>外面的this
方法:
1.看源碼中對應的函數(shù)是怎么被 call 的(這是最靠譜的辦法)
2.看文檔
3.console.log(this)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/106562.html
摘要:據(jù)預測,到年,大多數(shù)的企業(yè)應用將被遷移到云中。在云計算的霧期更需要對云計算產(chǎn)業(yè)有一個清醒的認識,不要在最后隨著霧散去自己也隨霧而去。 從概念開始逐漸轉(zhuǎn)為應用落地,各企業(yè)紛紛加入到云計算浪潮,國家也在大力扶植云計算產(chǎn)業(yè)。據(jù)預測,到2020年,大多數(shù)的企業(yè)應用將被遷移到云中。與此同時,越來越多的應用開發(fā)商也將把應用開發(fā)、測試平臺遷移到云中。 專家表示,以云計算為代表的新型計算機模式未來將成...
摘要:本文是對加深對的理解一文的導圖版翻譯中的是一個捉摸不透的東西,它很喜歡變化,很詭異。寫在后面的幾種綁定規(guī)則,歸根結(jié)底,的套路就是關(guān)于幾種模式的等價變換形式,知乎上面有大神解答,猛戳這最后是全圖附上思維導圖的下載鏈接去有道云筆記下載 本文是對《加深對 JavaScript This 的理解》一文的導圖版翻譯 JS中的this是一個捉摸不透的東西,它很喜歡變化,很詭異。擁抱變化,接收詭異...
摘要:實例對象與構(gòu)造函數(shù)的原型聯(lián)系是在創(chuàng)建實例時確定的,當創(chuàng)建后更改原型對象并不改變之前創(chuàng)建的實例所關(guān)聯(lián)的原型對象,新創(chuàng)建的使用新的原型對象。 再記面向?qū)ο?函數(shù)和對象的聯(lián)系 先理一下函數(shù)的功能: 創(chuàng)建:可以通過字面量創(chuàng)建 可以賦值給變量、數(shù)組作為成員和其他的對象作為屬性 作為函數(shù)的參數(shù) 作為返回值 自身可以添加屬性 在上面列出的函數(shù)功能對象皆具有 詳細函數(shù)介紹 為什么介紹函數(shù)? 因為閉...
摘要:的關(guān)鍵字總是讓人捉摸不透,關(guān)鍵字代表函數(shù)運行時,自動生成的一個內(nèi)部對象,只能在函數(shù)內(nèi)部使用,因為函數(shù)的調(diào)用場景不同,的指向也不同。其實只要理解語言的特性就很好理解。個人對中的關(guān)鍵字的理解如上,如有不正,望指正,謝謝。 javascript的this關(guān)鍵字總是讓人捉摸不透,this關(guān)鍵字代表函數(shù)運行時,自動生成的一個內(nèi)部對象,只能在函數(shù)內(nèi)部使用,因為函數(shù)的調(diào)用場景不同,this的指向也不...
摘要:原文函數(shù)的純潔性純函數(shù)非純函數(shù)副作用純函數(shù)一個函數(shù)返回的值只取決于他輸入的值,并且沒有副作用,那這個函數(shù)就是純函數(shù)。因此,純函數(shù)無法對它的父作用域作出任何修改。更多關(guān)于函數(shù)純潔性的資料 原文:Glossary of Modern JavaScript Concepts: Part 1 函數(shù)的純潔性:純函數(shù)、非純函數(shù)、副作用 純函數(shù) 一個函數(shù)返回的值只取決于他輸入的值,并且沒有副作用,那...
閱讀 1253·2021-11-24 09:38
閱讀 2659·2021-09-27 14:00
閱讀 1224·2019-08-30 15:55
閱讀 1395·2019-08-30 14:16
閱讀 1540·2019-08-30 10:54
閱讀 2920·2019-08-28 17:58
閱讀 809·2019-08-26 13:22
閱讀 1284·2019-08-26 12:01