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