this指向問題

誰調用它,this 就指向誰。

但是有時候這樣的判斷並不準確,可以按照如下規則進行判斷。

全局環境中的this

瀏覽器環境:無論是否在嚴格模式下,在全局執行環境中(在任何函數體外部)this 都指向全局對象 window

node 環境:無論是否在嚴格模式下,在全局執行環境中(在任何函數體外部),this 都是空對象 {}

是否是new綁定

如果是 new 綁定並且

構造函數返回值是 function 或 object,new foo()返回的是foo中返回的對象。

<script>
	function foo(age){
		this.age = age;
		var obj = {a:'1'};
		return obj;
	}
	let info = new foo('23');

	console.log(info);   //{a:'1'}
	console.log(info.age); //undefined
</script>

顯示綁定

函數是否通過call,apply調用,或者使用bind綁定,如果是,那麼this綁定的就是指定的對象

<script>
	function foo(){
		console.log(this.num);
	}
	var animal = {
		num:20,
		foo
	}
	var num = 23;
	var foo = animal.foo;

	foo.call(animal);   //20
	foo.apply(animal);  //20
	foo.bind(animal)(); //20
</script>

隱式綁定

函數的調用是在某個對象上觸發的,即調用位置上存在上下文對象,那麼this指向的就是調用該函數的對象

<script>
	function info (){
		console.log(this.age);
	}
	var person = {
		age:20,
		info
	}
	var age = 23;
	person.info();  //20;隱式綁定
</script>

箭頭函數

箭頭函數沒有自己的this,繼承外層上下文綁定的this

<script>
	var obj = {
		age:23,
		info:function(){
			return ()=>{
				console.log(this.age);
			}
		}
	}
	var person = {age:'20'};

	var info = obj.info();
	info();  //23

	var info2 = obj.info.call(person);
	info2();  //20
</script>

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章