建站教程

建站教程

Products

当前位置:首页 > 建站教程 >

JavaScript中如何理解this始终指向最后调用它的那个对象(js中的This指向问题的介绍)

GG网络技术分享 2025-03-18 16:13 86


JavaScript中如何理解this始终指向最后调用它的那个对象

JavaScript中this

JavaScript中如何理解this始终指向最后调用它的那个对象。

ES5中,this的指向始终坚持一个原则,就是永远指向最后调用它的那个对象。

重要的事说三遍

指向最后调用它的那个对象

指向最后调用它的那个对象

指向最后调用它的那个对象

看几个demo就会理解了:

1.

happy

inner:[object Window]

outer:[object Window]

this指向最后调用它的那个对象,之后调用supper的地方是supper(),相当于window.supper();inner中的this指向window,this.name肯定是happy了;

2.

sad

obj.supper(),调用者是obj,而obj.name是sad,所以说this.name是sad没问题

3.

sad

虽然这个调用加上了window,但是最后调用者仍然是obj,而obj.name是sad,所以说super中的this.name是sad没问题

4.

undefined

super的最后调用者是obj,所以super中的this肯定是指向obj的,而obj中的name没有定义,所以说为undefined

5.

happy

虽然将obj.supper赋值给了f,但是仅仅是赋值,没有调用,而f()是被window调用的,所以说super中的this指向window,this.nane是happy

6.

happy

最后调用innerFunction的是window,所以this是happy;

js中的This指向问题的介绍

MDN的官方解释:与其他语言相比,函数的 this 关键字在 JavaScript 中的表现略有不同,此外,在严格模式和非严格模式之间也会有一些差别。在绝大多数情况下,函数的调用方式决定了this的值。this不能在执行期间被赋值,并且在每次函数被调用时this的值也可能会不同。

简而言之:

1.this指向的对象称为函数的上下文对象context;

2.this的指向取决于函数被调用方式

不管函数怎么调用的天花乱坠,我们只要记住这几点即可清晰的找出this的指向。

2、小实验

function foo(){

console.log(this);

}

面试官问你this指向哪里,当然大声回答不知道,原因:谁调用指向谁,函数都没被调用,确实不知道指向。

liLei.buyPen.bind(hanMeiMei)(); //hanMeiMei have money:19

hanMeiMei.buyPan.apply(liLei)(); //liLei have money:8

小结:三种方法的相同指出是:可以改变this的指向,不同之处是:apply接受的参数为一个数组,call接收的参数为一个个独立的值;apply,call会直接调用方法,bind改变this的指向返回一个方法不调用。

标签:

提交需求或反馈

Demand feedback