js中的this到底是什麼意思
JS裡面總是會用到this,今天就和大家好好的談一下這個容易把人弄糊塗的this到底是個什麼東西,怎樣使用this
this的指向1, 普通函數指向函數的呼叫者:有個簡單的方法就是看函數前面有沒有點,如果有點,那麼就指向點前面的那個值; 2, 箭頭函數指向函數所在的所用域: 注意理解作用域,只有函數的{}構成作用域,物件的{}以及if(){}都不構成作用域;
const obj = { name: 'objName', say() { console.log(this.name); }, read: () => { console.log(this.name); } } obj.say(); // objName obj.read(); // undefined
普通函數,呼叫者是obj,所以結果是objname;也是理解say()是普通函數,前面有點,所以this指向obj;
箭頭函數,this指向函數所在的作用域,目前的作用域為全域環境,所以this.name為undefined,
舉下面的例子更清楚的了解一下箭頭函數this的指向,箭頭函數所在的作用域是普通函數say,say()的呼叫者是obj
const obj = { say: function () { setTimeout(() => { console.log(this) }); } }
#obj.say(); // obj,此時this指的是定義他的obj
補充知識點
瀏覽器預設的this為window
function test() { console.log(this); }
test( ); //window
node.js中全域環境預設this為{},普通函數預設this為global
console.log(this); // {} function test() { console.log(this); } test(); //global
來兩題檢查你是否掌握了
example1
const length = 10; function fn() { console.log(this.length); } const obj = { length: 5, method: function(fn) { fn(); arguments[0](); } }; obj.method(fn, 1);
輸出10, 2
剛開始看到這道題我也是濛濛的,現在也終於理解了,method這個函數傳入了兩個參數,一個參數為fn(),fn()為普通函數,this指向函數的調用者,此時指向全局(也可以看這個函數前面沒有點),所以運行結果為10,arguments是函數的所有參數,是一個類別數組的物件,arguments[0] (),可以看成是arguments.0() ,呼叫這個函數的是arguments,此時this就是指arguments,this.length就是angument.length,就是傳入的參數的總個數2
註:上面範例在node環境中的運行結果為undefined 2, const length = 10改成global.length = 10;是因為node環境下定義在全域的變數不會綁定到global,瀏覽器也會自動綁定到全域環境window
改成下面這樣結果又是什麼呢?
const length = 10; function fn() { console.log(this.length); } const obj = { length: 5, method: function(fn) { fn(); const fun = arguments[0]; fun(); } }; obj.method(fn, 1); 10, 10 example 2 window.val = 1; var obj = { val: 2, dbl: function() { this.val *= 2 val *= 2; console.log(val); console.log(this.val); } } obj.dbl(); // 2 4 var func = obj.dbl; func(); // 8 8
這個就是有點繞了,不過一步步來分析就很容易理解了:
obj.dbl();執行這行程式碼時,this指的是obj,所以this.val === obj.val*=2,最後結果為4 ,val*=2 === window.val *= 2,最後結果是2
func(),執行這行程式碼時,func()沒有任何前綴,this指的是window.func( );所以此時this值得是window,this.val === window.val *= 2,此時window.val 為4,val*=2 === window.val *2,最後結果為8,最後console.log(this.val),與console.log(val),指的都是window.val。
以上就是我對this的一些小理解,如果大家對於我的這篇文章有所疑問,歡迎和我交流。
相關推薦:
#以上是js中的this如何使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript起源於1995年,由布蘭登·艾克創造,實現語言為C語言。 1.C語言為JavaScript提供了高性能和系統級編程能力。 2.JavaScript的內存管理和性能優化依賴於C語言。 3.C語言的跨平台特性幫助JavaScript在不同操作系統上高效運行。

JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。

Python和JavaScript的未來趨勢包括:1.Python將鞏固在科學計算和AI領域的地位,2.JavaScript將推動Web技術發展,3.跨平台開發將成為熱門,4.性能優化將是重點。兩者都將繼續在各自領域擴展應用場景,並在性能上有更多突破。

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

是的,JavaScript的引擎核心是用C語言編寫的。 1)C語言提供了高效性能和底層控制,適合JavaScript引擎的開發。 2)以V8引擎為例,其核心用C 編寫,結合了C的效率和麵向對象特性。 3)JavaScript引擎的工作原理包括解析、編譯和執行,C語言在這些過程中發揮關鍵作用。

JavaScript是現代網站的核心,因為它增強了網頁的交互性和動態性。 1)它允許在不刷新頁面的情況下改變內容,2)通過DOMAPI操作網頁,3)支持複雜的交互效果如動畫和拖放,4)優化性能和最佳實踐提高用戶體驗。

C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Linux新版
SublimeText3 Linux最新版

Atom編輯器mac版下載
最受歡迎的的開源編輯器

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具