js中關於this的一個小問題

我們平時在寫代碼的時候肯定少不了和this打交道,我們都認爲this是指向自己,但是這句話其實是不完全正確的,可以看下面的代碼:

function show(){
			var a = 10;
			console.log(this.a);
		}
		show();

這段代碼並不會像大家想象中那樣輸出一個10,而是輸出undefined,這是爲什麼呢,推翻了大家心中的this指向自己這個說法。再看下面這段代碼:

function show(){
				var a = 10;
				console.log(this.a);
			}
			var a = 'golbal';
			show();   //輸出golbal
			

從上面可以看出這個this.a指向的是全局中的a,所以this應該說是指向調用他的那個作用域。

var obj = {
				
				a: function(){
					console.log(this);  //輸出的是window
				},
				b:{
					x: 20,
					func: function(){
						console.log(this);
					}
				}
			}
			
			var c = obj.a;
			
			c();  //在window中調用

但是我們想讓他指向自己而不是調用它的那個作用域怎麼辦呢,可以使用call方法

var obj = {
			
			a: function(){
				
				console.log(this);
				
			},
			b:{
				x: 20,
				func: function(){
					console.log(this.x);
				}
			}
		}
		
		
		var c = obj.a;
		c.call(obj.b)    //這裏會輸出20
		c.call(obj.a);  //這裏會輸出ƒ (){console.log(this);}  a函數本身

使用一個.call()函數就可以改變this的指向。除了這個函數之外還有和call()相同的apply()方法,另一個比較重要的也可以實現類似效果的是bind()方法 這是一個綁定函數。

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