摘要:動(dòng)態(tài)綁定的并不指向自身。是在運(yùn)行時(shí)候進(jìn)行綁定的,,并不是編寫的時(shí)候綁定的。就是這個(gè)記錄的一個(gè)屬性。最常見的執(zhí)行上下文就是,如很明顯,函數(shù)在這個(gè)環(huán)境下執(zhí)行,所以指向了。四條綁定規(guī)則的優(yōu)先級優(yōu)先級最高的是綁定,中調(diào)用函數(shù),綁定到新創(chuàng)建的對象中。
動(dòng)態(tài)綁定
JavaScript的this并不“指向自身”。
this是在運(yùn)行時(shí)候進(jìn)行綁定的,,并不是編寫的時(shí)候綁定的。
this指向執(zhí)行上下文,何為執(zhí)行上下文,我的理解是函數(shù)在“哪里”執(zhí)行的,這個(gè)記錄會(huì)包含函數(shù)在哪里會(huì)被調(diào)用(調(diào)用棧),函數(shù)的調(diào)用方式,傳入?yún)?shù)等信息。this就是這個(gè)記錄的一個(gè)屬性。最常見的執(zhí)行上下文就是window,如
var a=2; function foo(){ alert(this.a); //2 } foo();
很明顯,foo函數(shù)在window這個(gè)“環(huán)境”下執(zhí)行,所以this指向了window。(但在嚴(yán)格模式下,this不默認(rèn)指向window,所以代碼彈出undefined)
function foo(){ alert(this.a); } var obj={ a:2, foo:foo } obj.foo(); //2
函數(shù)foo在obj的環(huán)境下執(zhí)行,this默認(rèn)綁定到obj上。
以上兩種都屬于默認(rèn)綁定。
js中有call()和apply()可以顯性的傳入要綁定的對象
var obj={ a:10 } function foo(){ alert(this.a); } foo.call(obj); // 10
?new綁定
function foo(a){ this.a=a } var bar=new foo(20); console.log(bar.a); // 20
使用new來調(diào)用foo()時(shí)。我們會(huì)構(gòu)造一個(gè)新對象并把它綁定到foo()調(diào)用中的this上。
this四條綁定規(guī)則的優(yōu)先級優(yōu)先級最高的是new綁定,new中調(diào)用函數(shù),this綁定到新創(chuàng)建的對象中。
其次的是call,apply中顯性傳入要綁定的對象。
函數(shù)是否在某個(gè)上下對象中調(diào)用,如果是,this綁定的是上下文對象
如果都不是,函數(shù)在全局對象執(zhí)行,則綁定到全局對象中,在嚴(yán)格模式下,就綁定到undefined。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79345.html
摘要:我們使用最基本的事就是用來展現(xiàn)數(shù)據(jù)。使得展現(xiàn)數(shù)據(jù)變得簡單,并且當(dāng)數(shù)據(jù)改變時(shí),能自動(dòng)保持的更新。使用了內(nèi)部的虛擬,當(dāng)數(shù)據(jù)發(fā)生改變,先在虛擬中計(jì)算變化,最后將變動(dòng)的部分反應(yīng)到真實(shí)的中??梢园阉醋饔兄蜖顟B(tài)并且可以返回結(jié)構(gòu)的函數(shù)。 我們使用UI最基本的事就是用來展現(xiàn)數(shù)據(jù)。React使得展現(xiàn)數(shù)據(jù)變得簡單,并且當(dāng)數(shù)據(jù)改變時(shí),React能自動(dòng)保持UI的更新。 開始 創(chuàng)建一個(gè)簡單的Demo: ...
摘要:是用寫的一個(gè)第三方模塊,用于快速創(chuàng)建命令行??焖偈褂玫氖褂么笾掠袃蓚€(gè)步驟使用裝飾一個(gè)函數(shù),使之成為命令行接口使用等裝飾函數(shù),為其添加命令行選項(xiàng)等。本文標(biāo)題為命令行神器簡明筆記本文鏈接為參考資料學(xué)習(xí)筆記模塊 Click Click 是用 Python 寫的一個(gè)第三方模塊,用于快速創(chuàng)建命令行。我們知道,Python 內(nèi)置了一個(gè) Argparse 的標(biāo)準(zhǔn)庫用于創(chuàng)建命令行,但使用起來有些繁瑣,...
摘要:這樣每個(gè)實(shí)例獨(dú)享自己的屬性,并和其他同類型的實(shí)例共享方法構(gòu)造函數(shù)原型以上這種方式定義的類型,可以通過來判斷一個(gè)實(shí)例是否是類型的實(shí)際上是通過實(shí)例的原型鏈來判斷一個(gè)對象是否某個(gè)類型的實(shí)例的,具體的細(xì)節(jié)后面會(huì)詳細(xì)介紹。 JavaScript面向?qū)ο缶幊? 如何定義自定義類型 首先需要明確,JavaScript并不是傳統(tǒng)意義上的OO語言,它并沒有class的概念, 而是包含了另一套異常強(qiáng)大的...
摘要:然而事實(shí)上并不是。函數(shù)本身也是一個(gè)對象,但是給這個(gè)對象添加屬性并不能影響。一圖勝千言作者給出的解決方案,沒有麻煩的,沒有虛偽的,沒有混淆視線的,原型鏈連接不再赤裸裸。所以是這樣的一個(gè)函數(shù)以為構(gòu)造函數(shù),為原型。 注意:本文章是個(gè)人《You Don’t Know JS》的讀書筆記。在看backbone源碼的時(shí)候看到這么一小段,看上去很小,其實(shí)忽略了也沒有太大理解的問題。但是不知道為什么,我...
摘要:它的原型也是對象。只要你完全拋開面向?qū)ο蟮睦^承思路來看的原型繼承,你會(huì)發(fā)現(xiàn)它輕便但強(qiáng)大。最后寫出來的代碼會(huì)是這樣請注意,只有函數(shù)才有屬性,它是用來做原型繼承的必需品。 一篇文章讓你搞清楚 JavaScript 繼承的本質(zhì)、prototype、__proto__、constructor 都是什么。 很多小伙伴表示不明白 JavaScript 的繼承,說是原型鏈,看起來又像類,究竟是原型還...
閱讀 1032·2021-10-19 11:42
閱讀 2984·2021-09-10 10:51
閱讀 693·2021-09-09 09:33
閱讀 1772·2021-09-01 10:43
閱讀 2782·2019-08-30 12:43
閱讀 3529·2019-08-30 11:24
閱讀 2133·2019-08-30 10:56
閱讀 2786·2019-08-29 11:00