this指向问题

this指向问题。

this指向


 ღ  函数预编译过程中,this指向window。

在函数里定义一个this,

function test() {
	
console.log(this);
	
}

test();

控制台输出

未标题-1.jpg


ღ  在全局作用域里,this指向window。

直接在控制台输出this

未标题-1.jpg


ღ  call和apply可以改变运行时this的指向。

具体看博客call和apply那节


ღ  谁调用this,this就指向谁。

<script type="text/javascript">
	
var test = {
	
	a : function (){ 
		
	console.log(this.name);
		
	},
	
	name : '墨小白'
	
}

test.a();

</script>

test调用this,所以指向test,最后输出墨小白。


this习题


<script type="text/javascript">
	
var name = '222';

var a = {
	
	name : '111',
	
	say : function () {
		
	console.log(this.name);
		
	}
	
}

var fun = a.say;     
//a.say把函数引用赋值给fun

fun(); 
//fun在全局内内执行
//function () {console.log(this.name)}
//此时的this.name指向的时window,所以输出     '222'

a.say(); 
//对象a调用了this,所以指向对象a,输出'111'

var b = {
	
	name : '333',
	
	say : function(fun) {
		
		fun(); 
		
	}
	
}

b.say(a.say);
//...看解析

b.say = a.say;

b.say();
//b对象say属性值变成函数引用function () {console.log(this.name)}
//然后使用b执行,此时是b调用this,所以输出'333'

</script>

b.say(a.say)传参执行,所传参数为函数引用

function () {
		
console.log(this.name);
		
	}

模拟传参后

var b = {
	
	name : '333',
	
	say : function(fun) {
		
		(function () {
		
        console.log(this.name);
		
	})(); 
		
	}
	
}

因为用来传参执行的,所以传参后应该是这种立即执行函数

执行的this并没有被谁调用,所以说指向全局,输出'222'

猜你喜欢

转载自blog.csdn.net/dfggffdd/article/details/80085961