JS中this指向问题,new的过程

本文探讨JavaScript中this的动态绑定特性,通过实例分析this在不同情况下的指向,特别是new关键字如何影响this的指向。总结了new操作符的实例化过程,包括创建空对象、原型链绑定和函数执行等步骤,提醒读者在学习时保持独立思考,不要完全依赖他人的解释。

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

this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象

在这里插入图片描述

这里调用方法f1的是window对象,也就是说this指向window对象,所以会出现this.user 为undefined

在这里插入图片描述

这里调用方法f1的是对象a,就是说this指向a对象,所以this.user为a对象里面的“二狗子” 接下来朝深处看看

在这里插入图片描述

这段代码跟例2 比就是多了个window. 结果还是一样的,想说明什么问题呢,看下段代码

在这里插入图片描述

结果变成“大傻子”了,对比两段代码再结合最上面说的this指向调用它的对象,也就表名第一段代码是对象a调用的方法f1,第二段代码是对象b调用的,得出结论:在这种链式情况下,this指向的是它上一级的对象。可能表达的不太准确,反正就是那个意思。

再把b对象里面的user注释掉看看

在这里插入图片描述

这里的this应该是指向b对象的,但是b里面没有user啊,肯定就是undefined,通过this就把指代的对象给定死了,反正this就是指的b,我不管你里面有没有这个user,没有就返回undefined,我可不会去拿a的user,千万别与链式作用域搞混了,像下面这样

在这里插入图片描述

睁大眼看清楚了,这里没有this啊,所以执行f1的时候直接就是f1里面的user “二狗子”,执行f2的时候因为f2里面没有user,所以就朝外找,找到了外面的user “大傻子”。

不能再多说了,待会该迷糊了。再加个例子吧

在这里插入图片描述
其实就是new 关键字可以改变this的指向,通过new关键字,把一个对象实例给了a,同时this的指向也变成了a对象

还想说的一点就是,看博客或者看其他东西不要太跟着博主的思路,首先不敢保证他说的就完全正确,毕竟那也只是基于他的理解,除非这个人就是权威;其次,有时候太跟着博主的思路走,容易把你给陷进去,因为你总是不由自主的想要往要往博主的思路上靠,其实你是在按照别人的思路在思考,有时候可能就把你自己的想法给湮没掉了,说不定你的想法更加简单,更加深刻。

New关键字实例化过程

创建一个空对象。
伪代码:let obj={ }
将该对象的__proto__指向类的原型对象。
伪代码:obj.__proto__=A.prototype
绑定该函数内部的this,指向这个对象。
伪代码:this=obj
执行函数,并且将this作为返回值返回。
伪代码:/执行代码/ ; retrun this

参考博客:https://www.cnblogs.com/pssp/p/5216085.html

http://www.ruanyifeng.com/blog/2018/06/javascript-this.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值