JavaScript 是一種腳本語言,因此被很多人認為是簡單易學的。然而情況恰恰相反,JavaScript 支援函數式程式設計、閉包、基於原型的繼承等進階功能。本文僅採擷其中的一個例子:JavaScript 中的 this 關鍵字,深入淺出的分析其在不同情況下的含義,形成這種情況的原因以及 Dojo 等 JavaScript 工具中提供的綁定 this 的方法。可以這樣說,正確掌握了 JavaScript 中的 this 關鍵字,才算邁入了 JavaScript 這門語言的門檻。
至於js中this這個東西,好多淫解釋過了,看起來好高端的樣子,不曉得你看懂了木有?
先引用比較高階的,腳本之家裡 的, yes this
好了,下面加上鄙比較挫的解釋
論點: this 不是變量,不是屬性,不能為其賦值,它總是指向調用它的物件
感覺還TM太虛了,只要記住最重要的一條即可 」它總是指向調用它的對象“ ,所以找到調用this的對象,就知道this到底指向誰了
1、
alert(this);
瞅瞅,彈出來的是麼子,要么是”object window“ ,要么 "object" 總之就對象了,是那個對象呢?
alert(this === window);
結果為'true' 所以了,現在呼叫它的物件是window了
2、
var test = function(){ alert(this); } test();
猜猜上面彈出什麼,是不是跟"alert(this)" 這句一樣的
var test = function(){ alert(this === window); } test();
運行上面的程式碼,是不是彈出了'true' ?
事情就這樣完了?
要這麼簡單的話,何必那麼多人都去論述這個鳥了?
3、
再來
var test = function(){ alert(this === window); } new test();
哎哎,這次咋成'false'呢?
記住」this 總是指向呼叫它的物件「,第」1、「處呼叫該段程式碼的直接物件是全域對象,即"window" ;第」2、「處雖然是函數,但是呼叫其的仍然是」window「(不要搞混了,函數雖然是對象,但是調用它的是另一個對象);第」3、「處,使用了」new「 這時其實已經改變了,這是一個建構函數,建構函數在建立時建立了一個新的空的對象,即」new test()「建立了一個新的對象,然後再由這個物件指向函數"test"中的程式碼,因此此時this不在是window對象,而是該建構函式所建立的新對象。
4、
var test ={ 'a':1, 'b':function(){ alert(this === test) } } test.b();
有了上面的論點,這下一下子清楚了吧!
5、
var test ={ 'a':1, 'b':function(){ alert(this === test) } } var test1 = test; test1.b();
so, 你不會認為結果為"false"吧,錯了,雖然'test1'的值為'test' 但是'test1'不還是'test'對象麼,它有新產生對象,你暫且理解為引用的了,兩個都指向一個對象,奉上下面一段代碼為證
var test ={ 'a':1, 'b':function(){ alert(this === test) } } var test1 = test; test.a = 2; alert(test1.a);
如果彈出了」1「,你來罵我
6、再整個複雜的
var test ={ 'a':1, 'b':{ 'b1':function(){ alert(this === test); } } } test.b.b1();
這是"true"還是"false"呢?
依照上面的理論,這時"this"不再直接被'test'調用了,而是被'test.b' 調用, 奉上下面一段代碼為證
var test ={ 'a':1, 'b':{ 'b1':function(){ alert(this === test.b); } } } test.b.b1();
7、好再整個複雜點的
var test = function(){ var innerTest = function(){ alert(this === test); } innerTest(); } test();
你不會認為彈出"true"吧,不是按照上面的理論'innerTest'是被'test'調用的,然後'this'就指向'test'嗎?
額,錯就錯在是誰調用的'innerTest', 其實這種函數都是'window'對象調用的,及時你嵌套一千層,調用各個函數的都是'window'對象,奉上下面這段碼為證
var test = function(){ var innerTest = function(){ alert(this === window); var innerTest1 = function(){ alert(this === window); } innerTest1(); } innerTest(); } test();
8、再來一段特殊的
var test = function(){ alert(this === window); } var test1 = { } test.apply(test1);
這個我覺得大家都不會猜錯,該函數的作用就是”調用一個對象的一個方法,以另一個對象替換當前對象“ 所以了'window' 對像已經被替代為'test1',自然為'false'了,奉上如下代碼以為證明
var test = function(){ alert(this === test1); } var test1 = { } test.apply(test1);
那麼諸如'call'之類的也就相似了
9.再來一個原型的繼承,區別於字面量的繼承
var test = function(){ } var my = function(){ this.a = function(){ alert(this === mytest2); } } var mytest = new my(); test.prototype = mytest; var mytest2 = new test(); mytest2.a();
10、還剩下些什麼了,可能就是'dom'對象了
<script> var mytest = function(context){ alert(context.getAttribute('id')); alert(this === window); } </script> <div id="test" onclick="mytest(this)">aaaa</div>
看了上面的應該了解了吧,裡面的'this'分別代表神馬

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在服務器端運行,支持高並發請求。

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)