摘要:一全局范圍全局范圍中的將會(huì)指向全局對(duì)象,即。三作為對(duì)象的方法調(diào)用指向?qū)ο螅串?dāng)前對(duì)象。四作為構(gòu)造函數(shù)函數(shù)內(nèi)部的指向創(chuàng)建的對(duì)象。八一個(gè)常見的坑事件綁定中回調(diào)函數(shù)的。如果中有使用,指向,即使的形式是,其中的依然指向,可用的方法解決這個(gè)問題。
一、全局范圍
this // window
全局范圍中的this將會(huì)指向全局對(duì)象,即window。
二、普通函數(shù)調(diào)用function foo(x) { this.x = x; } foo(3); (x /* or this.x */); // 3
this指向全局對(duì)象,即window。嚴(yán)格模式時(shí),為undefined。
三、作為對(duì)象的方法調(diào)用var name = "foo"; var person = { name : "bar", hello : function(sth){ console.log(this.name + " says " + sth); } } person.hello("hello"); // bar says hello
this指向person對(duì)象,即當(dāng)前對(duì)象。
四、作為構(gòu)造函數(shù)var foo = new Bar(name) { this.name = name; this.age = 28; }
函數(shù)內(nèi)部的this指向創(chuàng)建的對(duì)象。
五、閉包(內(nèi)部函數(shù))var name = "foo"; var person = { name : "bar", hello : function(sth){ var sayhello = function(sth) { console.log(this.name + " says " + sth); }; sayhello(sth) } } person.hello("hello"); // foo says hello
this.name為foo,所以this指向全局變量,即window。所以,一般將this作為變量保存下來。代碼如下:
var name = "foo"; var person = { name : "bar", hello : function(sth){ var self = this; var sayhello = function(sth) { console.log(self.name + " says " + sth); }; sayhello(sth) } } person.hello("hello"); // bar says hello六、使用call與apply設(shè)置this
fun.apply(thisArg, [argsArray]) fun.call(thisArg[, arg1[, arg2[, ...]]])
函數(shù)綁定到thisArg這個(gè)對(duì)象上使用,this就指向thisArg。
七、總結(jié)當(dāng)函數(shù)作為對(duì)象的方法調(diào)用時(shí),this指向該對(duì)象。
當(dāng)函數(shù)作為淡出函數(shù)調(diào)用時(shí),this指向全局對(duì)象(嚴(yán)格模式時(shí),為undefined)。
構(gòu)造函數(shù)中的this指向新創(chuàng)建的對(duì)象。
嵌套函數(shù)中的this不會(huì)繼承上層函數(shù)的this,如果需要,可以用一個(gè)變量保存上層函數(shù)的this。
一句話總結(jié):如果在函數(shù)中使用了this,只有在該函數(shù)直接被某對(duì)象調(diào)用時(shí),該this才指向該對(duì)象。
八、一個(gè)常見的坑事件綁定中回調(diào)函數(shù)的this。
addEventListener(elem, func, false);
如果func中有使用this,this指向elem,即使func的形式是obj.func,其中的this依然指向elem,可用var self = this;的方法解決這個(gè)問題。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/79497.html
摘要:赫敏第三行的是在最外層執(zhí)行,也就是在全局對(duì)象下。而在對(duì)象下聲明了屬性,就相當(dāng)于羅恩,輸出的當(dāng)然就是羅恩。之所以寫這篇文章,是為了我下一篇文章做鋪墊快速理解中和的用法敬請(qǐng)期待 this是 JS 這門語言的魅力之一——靈活方便又難以捉摸,即使是有經(jīng)驗(yàn)的程序員,如果不仔細(xì)也有可能搞錯(cuò),關(guān)于this的用法也成為許多公司的經(jīng)典面試題。 如果你寫過 Java ,你可能接觸過this——一般指向當(dāng)前...
摘要:其實(shí)它們都很簡(jiǎn)單,但是在處理一些與相關(guān)的函數(shù)的時(shí)候,用來改變函數(shù)中的指向,卻是必不可少的工具,所以必須掌握好它們的用法。 關(guān)于javascript中的bind、call、apply等函數(shù)的用法 我GitHub上的菜鳥倉(cāng)庫(kù)地址: 點(diǎn)擊跳轉(zhuǎn)查看其他相關(guān)文章 文章在我的博客上的地址: 點(diǎn)擊跳轉(zhuǎn) ? ? ? ? 前面的文章已經(jīng)說到this的指向了,那么這篇文章就要說一說和this相關(guān)的三個(gè)...
摘要:什么是函數(shù)的作用域函數(shù)作用域在中,作用域?yàn)榭稍L問變量,對(duì)象,函數(shù)的集合。函數(shù)作用域作用域在函數(shù)內(nèi)修改。與函數(shù)又有什么關(guān)系呢對(duì)象是在運(yùn)行時(shí)基于函數(shù)的執(zhí)行環(huán)境綁定的。 什么是函數(shù)的作用域 函數(shù)作用域:在 JavaScript 中,作用域?yàn)榭稍L問變量,對(duì)象,函數(shù)的集合。JavaScript 函數(shù)作用域: 作用域在函數(shù)內(nèi)修改。 this 與函數(shù)又有什么關(guān)系呢? this對(duì)象是在運(yùn)行時(shí)基于函數(shù)的...
摘要:使用原型屬性屬性允許您向?qū)ο髽?gòu)造函數(shù)添加新屬性屬性還允許您向?qū)ο髽?gòu)造函數(shù)添加新方法更好的原型對(duì)象的教程 JavaScript對(duì)象原型所有JavaScript對(duì)象都從原型繼承屬性和方法。 js JavaScript 對(duì)象 function Person(first, last, age, eye) { this.firstName = fi...
摘要:不過,匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此其通常指向??尚性蚴沁@里的賦值實(shí)際上把匿名函數(shù)當(dāng)作表達(dá)式處理了,表達(dá)式后面可以加括號(hào)。 this是Javascript語言的一個(gè)關(guān)鍵字。它代表函數(shù)運(yùn)行時(shí),自動(dòng)生成的一個(gè)內(nèi)部對(duì)象,只能在函數(shù)內(nèi)部使用。比如, function test(){ this.x = 1; }隨著函數(shù)使用場(chǎng)合的不同,this的值會(huì)發(fā)生變化。有一個(gè)總的原則,那就是...
閱讀 2992·2021-10-19 11:46
閱讀 985·2021-08-03 14:03
閱讀 2942·2021-06-11 18:08
閱讀 2912·2019-08-29 13:52
閱讀 2760·2019-08-29 12:49
閱讀 487·2019-08-26 13:56
閱讀 930·2019-08-26 13:41
閱讀 852·2019-08-26 13:35