摘要:每個函數(shù)的是在調(diào)用的時候被綁定的,完全取決于函數(shù)的調(diào)用位置。嚴(yán)格模式隱式綁定對象環(huán)境這種綁定并不靠譜,比如在回調(diào)的情況下。顯式綁定隱式綁定把函數(shù)直接綁定到了目標(biāo)對象的一個屬性上。是因?yàn)槭录|發(fā)是異步的,如果不,觸發(fā)時的就是當(dāng)時的元素。
每個函數(shù)的this是在調(diào)用的時候被綁定的,完全取決于函數(shù)的調(diào)用位置。
表現(xiàn)特征有點(diǎn)像動態(tài)作用域,從就近查找調(diào)用棧,來判斷this指向誰。
var a = 2; function foo(){ console.log(this.a); } foo() //2
這個例子中,foo()在全局環(huán)境中被裸著調(diào)用,毫無上下文。所以這時this被調(diào)用的時候從內(nèi)向外尋找a,可以找到全局變量a。
但是在嚴(yán)格模式(strict mode)中,默認(rèn)綁定就不生效。
var a = 2; function foo(){ "use strict"http://嚴(yán)格模式 console.log(this.a); } foo() //undefined2.隱式綁定 (對象環(huán)境)
var obj = { a: 2, foo:foo } function foo(){ console.log(this.a); } obj.foo()//2 foo()//undefined
這種綁定并不靠譜,比如在回調(diào)的情況下。
function foo(){ console.log(this.a); } var obj = { a:2, foo:foo } setTimeout(obj.foo, 100);//undefined
為什么不靠譜, 在setTimeout時調(diào)用,this指向了setTimeout這個函數(shù)而不再是obj這個對象。
3.顯式綁定(call, apply, bind)隱式綁定把函數(shù)直接綁定到了目標(biāo)對象的一個屬性上。如果我們不想在對象內(nèi)部包含函數(shù)引用,而想直接在某個對象上運(yùn)用函數(shù)。就要用顯式綁定。
function sayName(){ console.log(this.name); } sayName(); //直接調(diào)用這個函數(shù)將找不到this,返回undefine。 person1 = new Person("leo"); //sayName使用call()將this指向person1就好了。 sayName.call(person1);//"leo" function sayNameAndMore(age, gender){ console.log(this.name + age + gender) } //apply用法 sayNameAndMore.apply(person1, [" 18 "," male "]);//leo 18 male共同點(diǎn)
都是被函數(shù)調(diào)用,如someFunction.call(obj), someFunction.apply(obj)
都將this指向填入的參數(shù)obj,someFunction函數(shù)定義中的所有this就可以按照想要的效果進(jìn)行。
區(qū)別call和apply直接執(zhí)行,bind之后執(zhí)行。
call只接受一個參數(shù),而apply接受一個參數(shù)數(shù)組。
React中的bindReact中我們總是要把事件handle函數(shù)bind到組件上。是因?yàn)槭录|發(fā)是異步的,如果不bind,觸發(fā)時的this就是當(dāng)時的dom元素。就像上面隱式綁定不靠譜的情況一樣。
new綁定new綁定涉及更多知識點(diǎn),不在這里寫
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/102873.html
摘要:使用別名時,容器首先將別名元素所定義的別名注冊到容器中。調(diào)用的方法向容器注冊解析的通過對對象的解析和封裝返回一個通過這個來注冊對象當(dāng)調(diào)用向容器注冊解析的時,真正完成注冊功能的是。 文章參考來自:https://www.cnblogs.com/ITtan... 文章代碼來自 spring-boot 1.4.1 Release版本 Spring IoC容器對Bean定義資源的載入是從ref...
摘要:而函數(shù)作用是加載延遲服務(wù),與容器解析關(guān)系不大,我們放在以后再說。在構(gòu)造之前,服務(wù)容器會先把放入中,繼而再去解析。利用服務(wù)容器解析依賴的參數(shù)。 make解析 首先歡迎關(guān)注我的博客: www.leoyang90.cn 服務(wù)容器對對象的自動解析是服務(wù)容器的核心功能,make 函數(shù)、build 函數(shù)是實(shí)例化對象重要的核心,先大致看一下代碼: public function make($abst...
摘要:它們不是主樹的一部分。在樹中,文檔片段被其所有的子元素所代替。因?yàn)槲臋n片段存在于內(nèi)存中,并不在樹中,所以將子元素插入到文檔片段時不會引起頁面回流對元素位置和幾何上的計算。因此,使用文檔片段通常會帶來更好的性能。 本教程說明將采用es6語法來編寫 創(chuàng)建MiniVue.js文件 //創(chuàng)建一個MVVM類 class MVVM { // 構(gòu)造器 constructor(option) ...
摘要:前言以下源碼基于版本解析。實(shí)現(xiàn)源碼分析對于的實(shí)現(xiàn),總結(jié)來說就是定位加載和注冊。定位就是需要定位配置文件的位置,加載就是將配置文件加載進(jìn)內(nèi)存注冊就是通過解析配置文件注冊。下面我們從其中的一種使用的方式一步一步的分析的實(shí)現(xiàn)源碼。 前言 以下源碼基于Spring 5.0.2版本解析。 什么是IOC容器? 容器,顧名思義可以用來容納一切事物。我們平常所說的Spring IOC容器就是一個可以容...
摘要:服務(wù)容器的綁定綁定歡迎關(guān)注我的博客綁定是服務(wù)容器最常用的綁定方式,在上一篇文章中我們討論過,的綁定有三種綁定自身綁定閉包綁定接口今天,我們這篇文章主要從源碼上講解服務(wù)容器是如何進(jìn)行綁定的。將閉包函數(shù)和單例變量存入數(shù)組中,以備解析時使用。 服務(wù)容器的綁定 bind 綁定 歡迎關(guān)注我的博客:www.leoyang90.cn bind 綁定是服務(wù)容器最常用的綁定方式,在 上一篇文章中我們討論...
閱讀 25659·2021-09-29 09:41
閱讀 4819·2021-09-10 11:20
閱讀 1936·2021-09-09 09:32
閱讀 1900·2019-08-30 15:44
閱讀 3209·2019-08-29 17:13
閱讀 2819·2019-08-29 14:14
閱讀 2076·2019-08-29 14:11
閱讀 3238·2019-08-29 12:36