摘要:但是有一個總的原則,那就是指的是調(diào)用函數(shù)的那個對象。作為構(gòu)造函數(shù)調(diào)用如果在一個函數(shù)前面帶上來調(diào)用,那么背地里將會創(chuàng)建一個鏈接到該函數(shù)的成員的新對象,同時會被綁定到那個新對象上。使用或調(diào)用方法讓我們構(gòu)建一個參數(shù)數(shù)組傳遞給調(diào)用函數(shù)。
讓我們深入探索一下this的具體用法 只有了解this用法才算真正入門了
首先來聊聊:what"this?
this是Javascript語言的一個關(guān)鍵字。
它代表函數(shù)運行時,自動生成的一個內(nèi)部對象,只能在函數(shù)內(nèi)部使用。隨著函數(shù)使用場合的不同,this的值會發(fā)生變化。但是有一個總的原則,那就是this指的是調(diào)用函數(shù)的那個對象。
This 被分為三種情況:全局對象、當前對象或者任意對象;判斷處于那種情況,這完全取決于函數(shù)的調(diào)用方式
JavaScript 中函數(shù)的調(diào)用有以下幾種方式:
作為函數(shù)調(diào)用
作為對象方法調(diào)用
作為構(gòu)造函數(shù)調(diào)用
使用 apply 或 call 調(diào)用
“我要問的是this!你咋給我講起函數(shù)調(diào)用來了?要暈了?。。 ?/p>
別急!且聽我慢慢道來:
作為函數(shù)調(diào)用這是我們最常用的方法,這種調(diào)用方式屬于全局調(diào)用!以此模式調(diào)用函數(shù)時,
this被綁定到全局對象。(什么?全局變量,難道它是一輛公交車?)
先來個干貨
function example(){ this.n = "hello world !"; console.log(this.n); console.log(this); } example();
調(diào)用 example(); 時,輸出了 ‘hello world !’ 還有 Window;
什么,還不信?行,再來個更猛的
var n = "hello world !"; function example(){ this.n = 0; } example(); console.log(n);
果然是一輛公交車!??!
作為對象方法調(diào)用當一個函數(shù)被保存為對象的一個屬性時,我們稱它為一個方法。當一個方法被調(diào)用,this被綁定到該對象。
var name="A"; var student = { name:"C", showName:function(){ console.log(this.name); } } dogs.showName(); //輸出 C var boyName = student.showName(); boyName(); //輸出 A
當執(zhí)行 dogs.showName(); 時輸出 C ,說明這個時候this指向的是student這個對象的;當我們把student.showName();賦給boyName時,showName() 是做什么用的,很顯然,輸出它函數(shù)的執(zhí)行環(huán)境所指向?qū)ο蟮膎ame,而此時boyName 變量相當于 Window 對象的一個屬性,因此 boyName() 執(zhí)行的時候相當于 window.boyName(),所以 this 關(guān)鍵字指向 window;所以就會輸出 A 。
作為構(gòu)造函數(shù)調(diào)用如果在一個函數(shù)前面帶上new來調(diào)用,那么背地里將會創(chuàng)建一個鏈接到該函數(shù)的prototype成員的新對象,同時this會被綁定到那個新對象上。
function example(){ this.n = "hello world !"; } var other = new example(); console.log(other.n);
從運行結(jié)果可以看出:
我們?yōu)閑xample這個函數(shù)new(構(gòu)造)了一個新的對象 other,那么 this 就會指向 other 這個對象,所以就會輸出 ‘hello world !’。
apply 方法讓我們構(gòu)建一個參數(shù)數(shù)組傳遞給調(diào)用函數(shù)。他允許我們選擇this值。
它應用某對象的一個方法,用另一個對象替換當前對象。
var n = "hello world!"; function example(){ console.log(this.n); } var o={}; o.n = "hey~"; o.m = example; o.m.apply(); //輸出 "hello world!"
當apply()的參數(shù)為空時,就是沒有對象去替換掉當前的對象,所以默認調(diào)用全局對象。
因此,這時會輸出’hello world!’,證明this指的是全局對象。
當我們給apply()指定一個對象時:
var n = "hello world!"; function example(){ console.log(this.n); } var o={}; o.n = "hey~"; o.m = example; o.m.apply(o); // 輸出"hey~"
此時輸出了’hey~’,說明對象替換成功,this 指向了 o 這個對象。
以上介紹的就是JavaScript中this在不同情況下的含義。雖然這只是很小的一部分,但對于理解函數(shù)卻作用很大。作為一個入門不久的我,這只是我最近一些小小的理解,希望能幫助那些想學習的小白!
也希望大佬們能多多包涵,畢竟知識有限寫的肯定有很多缺陷!部分借鑒網(wǎng)絡!
溜了溜了!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/89696.html
摘要:的翻譯文檔由的維護很多人說,阮老師已經(jīng)有一本關(guān)于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發(fā)過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復雜性。 JavaScript Promise 迷你書(中文版) 超詳細介紹promise的gitbook,看完再不會promise...... 本書的目的是以目前還在制定中的ECMASc...
摘要:關(guān)鍵字計算為當前執(zhí)行上下文的屬性的值。毫無疑問它將指向了這個前置的對象。構(gòu)造函數(shù)也是同理。嚴格模式無論調(diào)用位置,只取顯式給定的上下文綁定的,通過方法傳入的第一參數(shù),否則是。其實并不屬于特殊規(guī)則,是由于各種事件監(jiān)聽定義方式本身造成的。 this 是 JavaScript 中非常重要且使用最廣的一個關(guān)鍵字,它的值指向了一個對象的引用。這個引用的結(jié)果非常容易引起開發(fā)者的誤判,所以必須對這個關(guān)...
摘要:下面是用實現(xiàn)轉(zhuǎn)成抽象語法樹如下還支持繼承以下是轉(zhuǎn)換結(jié)果最終的結(jié)果還是代碼,其中包含庫中的一些函數(shù)。可以使用新的易于使用的類定義,但是它仍然會創(chuàng)建構(gòu)造函數(shù)和分配原型。 這是專門探索 JavaScript 及其所構(gòu)建的組件的系列文章的第 15 篇。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! 如果你錯過了前面的章節(jié),可以在這里找到它們: JavaScript 是...
閱讀 2520·2023-04-25 17:37
閱讀 1203·2021-11-24 10:29
閱讀 3709·2021-09-09 11:57
閱讀 704·2021-08-10 09:41
閱讀 2256·2019-08-30 15:55
閱讀 2822·2019-08-30 15:54
閱讀 1951·2019-08-30 15:53
閱讀 906·2019-08-30 15:43