js中的this的指向

本文详细解析了JavaScript中this关键字的不同应用场景及其指向规则,包括作为普通方法、对象方法、构造函数及箭头函数中的调用方式,并探讨了如何利用call、apply、bind方法来改变this指向。
摘要由CSDN通过智能技术生成

  this 的应用场景
     1. 作为普通方法被调用(谁调用次方方法this指向谁直接调用者)

        

function fn(){
	console.log(this);
 }
fn(); //window

      2. 使用call  apply  bind 被调用(用来改变this的和传值)

        

const obj1 ={
		 x:1,
		 obj2:{
			 x:2,
			 fn:function(){
					 console.log(this);
					 console.log('arg',arguments);
				}
			}
		}
		obj1.obj2.fn.call(obj1,1,2,3);
		obj1.obj2.fn.apply(obj1,[4,5,6]);
		obj1.obj2.fn.bind(obj1,7,8,9)();

     \

 

      3. 作为对象方法被调用

                

const obj1 ={
			x:1,
			obj2:{
			  x:2,
			  fn:function(){
					console.log(this);
					console.log('arg',arguments);
				}
				
                }	
		}

obj1.obj2.fn()

       4. 构成函数中调用,返回的是当前实例对象

        

function Person(){
	 this.name ='张三'
	 return  this; // 没有写的时候自动默认返回
}
console.log(new Person().name) // 张三  构造函数就是用来创建新对象的所以返回这个对象

5.在class 中被调用(es6 新增的)

class Person {
	constructor(){
		this.sex ='man' //这个值可以初始化
	}
		
	say(){
		console.log('sayName',this.name)// this 指向当实例化的新对象
		}
	}
	console.log('name',new Person().name);
	console.log('person',new Person());
	new Person().say()

      5. 箭头函数中被调用(此时的call  apply  bind只是用来传值    此函数没有arguments)      

const obj ={
				x:1,
				obj2:{
					x:2,
					fn:(...rest)=>{
							console.log(this,rest);
					}
				}
				
				
		}
		obj.obj2.fn.call(obj,1,2,3); 
		obj.obj2.fn.apply(obj,[4,5,6]);
		obj.obj2.fn.bind(obj,7,8,9)();

6 总结

 this 的指向是在执行的时候决定的不是在定义时觉得的即:谁调用指向谁,除了构造函数和箭头函数,构造函数的this指向实例,箭头函数不绑定this,会捕获其所在的上下文的this值,作为自己的this值。任何方法都改变不了其指向call  apply  bind 只是个传值

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值