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>

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值