摘要:中是在運(yùn)行的時(shí)候進(jìn)行綁定的,這是中關(guān)鍵字具備多重含義的本質(zhì)原因。所以,中的可以是全局對(duì)象當(dāng)前對(duì)象或者是任意對(duì)象。
Js中this是在運(yùn)行的時(shí)候進(jìn)行綁定的,這是Js中this關(guān)鍵字具備多重含義的本質(zhì)原因。所以,Js中的this可以是全局對(duì)象、當(dāng)前對(duì)象或者是任意對(duì)象。這完全取決于函數(shù)的調(diào)用方式,而js中函數(shù)的調(diào)用有以下幾種方式:
作為對(duì)象方法調(diào)用
作為函數(shù)調(diào)用
作為構(gòu)造函數(shù)調(diào)用
使用apply或call調(diào)用
根據(jù)以下判斷,判別this分別指向什么:
1.函數(shù)調(diào)用是用new進(jìn)行調(diào)用的嗎?如果是,則this指向新創(chuàng)建的對(duì)象,否則進(jìn)行下一步判斷
2.判斷該函數(shù)是否是用dot(.)進(jìn)行調(diào)用的,如果是的話,那么this指向dot(.)之前的對(duì)象;否則this指向全局對(duì)象window.
四種調(diào)用方式中this的指向
函數(shù)調(diào)用模式中this指全局對(duì)象(window)
var f1 = function() { alert("這個(gè)是函數(shù)調(diào)用"); alert(this);//window }; f1();
方法調(diào)用
由對(duì)象調(diào)用方法(當(dāng)對(duì)象為null的時(shí)候,函數(shù)進(jìn)行函數(shù)調(diào)用模式,當(dāng)對(duì)象不為null的時(shí)候,函數(shù)實(shí)現(xiàn)方法調(diào)用模式)
在方法調(diào)用模式中 this 表示當(dāng)前對(duì)象
var o = {name:"小明"}; o.say = function() { alert(this.name);//小明 alert(this);//o }; o.say();
任何一個(gè)函數(shù)放在new 后面就是構(gòu)造函數(shù),構(gòu)造函數(shù)的this是構(gòu)造函數(shù)返回的對(duì)象,構(gòu)造函數(shù)的return發(fā)生變化,如果返回的是對(duì)象,直接返回,否則返回創(chuàng)建出來(lái)的對(duì)象
如
var Person = function(n) { this.name = n; return { name:"男", get:function(){ console.log(this.name); }; // return 123; } var p = new Person();
函數(shù)的apply調(diào)用模式和call調(diào)用模式
語(yǔ)法:
函數(shù)名.apply(對(duì)象, [參數(shù)數(shù)組]);
函數(shù)名.call(對(duì)象, 參數(shù)列表);
如
var func = function() { this.name = "小明"; this.say = function(){alert(this.name + "學(xué)習(xí)好");}; }; func.apply(null); // 等價(jià)于 func();
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/93606.html
摘要:在全局對(duì)象中調(diào)用,自然讀取的是全局對(duì)象的值構(gòu)造器調(diào)用說(shuō)明作為構(gòu)造器調(diào)用時(shí),指向返回的這個(gè)對(duì)象。最直觀的表現(xiàn)就是,去看一些優(yōu)秀框架的源代碼時(shí),不再是被繞的暈乎乎的。 學(xué)習(xí)起因: 在之前的JavaScript學(xué)習(xí)中,this,call,apply總是讓我感到迷惑,但是他們的運(yùn)用又非常的廣泛。遂專門(mén)花了一天,來(lái)弄懂JavaScript的this,call,apply。中途參考的書(shū)籍也很多,以...
摘要:一等公民對(duì)象函數(shù)在提指向問(wèn)題之前,肯定是有必要說(shuō)明一等公民對(duì)象,既然是對(duì)象,那么就能像普通的值一樣傳遞。在普通瀏覽器中指向的是在中指向的是全局對(duì)象全局環(huán)境中或者模塊環(huán)境中。即指向或者的第一個(gè)參數(shù)。第二條規(guī)則,指向的不是原文鏈接 1. 一等公民對(duì)象——函數(shù) 在提t(yī)his指向問(wèn)題之前,肯定是有必要說(shuō)明一等公民對(duì)象function ,既然function是對(duì)象,那么就能像普通的值一樣傳遞。嗯...
摘要:出現(xiàn)箭頭函數(shù)的時(shí)候,指向?yàn)槎x時(shí)的上下文對(duì)象而非指向時(shí),并且不能被改變首先我們先看一個(gè)例子由上面的例子我們可以看出來(lái)此時(shí)指針在用改變了之后指向的依然是全局對(duì)象非嚴(yán)格瀏覽器環(huán)境中是而非。 javascript基礎(chǔ)之this指針 越往后面學(xué)越發(fā)現(xiàn)基礎(chǔ)的重要性,所以打算重新過(guò)一遍基礎(chǔ),之后出幾個(gè)vue和react的實(shí)戰(zhàn)教程。ok,嚴(yán)歸正傳。 首先什么是this this是執(zhí)行上下文創(chuàng)建時(shí)確定...
摘要:再來(lái)看一個(gè)小的示例淘寶騰訊淘寶為什么輸出的依然是淘寶呢調(diào)用的是對(duì)象中的方法,方法里面有一個(gè)定時(shí)器,而定時(shí)器的一個(gè)參數(shù)是這里的指的就是的對(duì)象,然后方法里面有調(diào)用了,但是定時(shí)器中的指的是對(duì)象,所以最終調(diào)用的是對(duì)象中。 1.看前熱身 看一段代碼 var name = javascript; var obj = { name:js, foo:f...
摘要:第四點(diǎn)也要著重講下,記住構(gòu)造函數(shù)被操作,要讓正常作用最好不能在構(gòu)造函數(shù)里 4) this、new、call和apply的相關(guān)問(wèn)題 講解this指針的原理是個(gè)很復(fù)雜的問(wèn)題,如果我們從javascript里this的實(shí)現(xiàn)機(jī)制來(lái)說(shuō)明this,很多朋友可能會(huì)越來(lái)越糊涂,因此本篇打算換一個(gè)思路從應(yīng)用的角度來(lái)講解this指針,從這個(gè)角度理解this指針更加有現(xiàn)實(shí)意義。 下面我們看看在ja...
摘要:也就是說(shuō)當(dāng)返回的函數(shù)作為構(gòu)造函數(shù)的時(shí)候,時(shí)指定的值會(huì)失效,但傳入的參數(shù)依然生效。構(gòu)造函數(shù)效果的優(yōu)化實(shí)現(xiàn)但是在這個(gè)寫(xiě)法中,我們直接將,我們直接修改的時(shí)候,也會(huì)直接修改函數(shù)的。 JavaScript深入系列第十一篇,通過(guò)bind函數(shù)的模擬實(shí)現(xiàn),帶大家真正了解bind的特性 bind 一句話介紹 bind: bind() 方法會(huì)創(chuàng)建一個(gè)新函數(shù)。當(dāng)這個(gè)新函數(shù)被調(diào)用時(shí),bind() 的第一個(gè)參數(shù)...
閱讀 808·2021-10-14 09:43
閱讀 2133·2021-09-30 09:48
閱讀 3456·2021-09-08 09:45
閱讀 1103·2021-09-02 15:41
閱讀 1898·2021-08-26 14:15
閱讀 786·2021-08-03 14:04
閱讀 2985·2019-08-30 15:56
閱讀 3081·2019-08-30 15:52