web前端this指向(小白学前端)

本文深入探讨JavaScript中this关键字的指向规则,包括事件调用、全局环境、函数内部、构造函数及箭头函数等场景。解析this指向与调用环境的关系,帮助开发者理解并正确使用this。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

this指向

总结this指向的相关问题。在事件调用环境,谁触发事件,函数里的this指向的就是谁;全局环境:浏览器运行的页面的全局对象指向window,如果用单独js文件运行this指向module.exports对象(导出的对象);函数内部,①this最终指向的是调用它的对象②函数被多层对象所包含,如果函数被最外层对象调用,this指向的也只是他的上层对象③this指向与函数的声明无关,只与调用函数的时候所指向的对象有关

事件调用环境

	let box = document.querySelector('.box')
	let lili =  document.querySelector('.lili')
	box.onclick = move;
	lili.onclick = move;
	fuction move(){
		this.style.left = '100px'
	}

全局环境

浏览器运行的页面的全局对象指向window,如果用单独js文件运行this指向module.exports对象(导出的对象)

	console.log(this)
	console.log(this === module.exports)

函数内部

函数内部分为三种情况

this最终指向的是调用它的对象

	fuction move(){
		console.log(this)
		this.style.left = '100px'
	}
	move();			//window		undefined
	window.move()	//window
	var abc = 10	//可在window对象下找到abc属性

	var obj = {
		a:10,
		b:function(){
			console.log(this)
		}
	}
	
	obj.b();		//this指向obj
	window.obj.b()		//this指向obj

函数被多层对象所包含

函数被多层对象所包含,如果函数被最外层对象调用,this指向的也只是他的上层对象

	var obj = {
		a:10,
		b:{
			fn:function(){
				console.log(this)
			}
		}
	}
	
	var abc = obj.b.fn;
	window.obj.b.fn()		//this指向b
	abc()				//this指向window,前面省略了window

总结:this指向与函数的声明无关,只与调用函数的时候所指向的对象有关

构造函数

	function fn(){
		this.num = 10;
		console.log(this.num)
	}
	/**
		var obj =new fn();	//{num:10}
		console.log(obj)	//{num:10}
		console.log(obj.num)	//10
		
		new
		1、调用了函数
		2、在函数内隐式自动创建一个对象var obj{}
		3、把创建出来的对象和this绑定
		4、如果构造函数没有返回值,隐式返回this对象
	*/	
	fn.num = 20;
	fn.prototype.num = 30;
	fn.prototype.method = function(){
		console.log(this.num)
	}
	var prototype  = fn.prototype;
	var method = prototype.method
	new fn()			//10
	new fn().method();	//10
	prototype.method();	//30
	method()			//underfined

箭头函数

	function fn(){
		this.num = 10;
		return ''
	}
	var obj = new fn();
	console.log(obj.num)	//underfined
	//返回出来的不是一个对象,this还是指向实例化对象
	//返回出来一个对象function,this是指向return对象
	//返回出来是一个数据类型,this还是指向实例化对象
	//返回出来是null对象,this还是指向实例化对象

	let box = document.querySelector('.box')
	let lili =  document.querySelector('.lili')
	box.onclick = move;
	lili.onclick = move;
	fuction move(){
		setTimeout(()=>{
			this.style.left = '100px'
		},1000)
	}

//setTimeout中的匿名function()是this指向window

//改为箭头函数,this指向,是根据他所在地方上下文决定,实际是调用上一层this的作用域内


var obj = {
	fn:()=>{
		console.log(this)	
		//因为obj是一个对象,没有形成作用域,因此this还是指向window
	}
}

总结:箭头函数this指向是声明就固定了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值