js中this的指向问题归纳总结

js中this的指向问题归纳总结

最近发现很多朋友在学习JS的时候对这个指向问题有很大的误解或者只是大概的了解,但是一旦遇到复杂的情况,就会因为这个指向问题产生各种bug。所以本文主要介绍js中关于this的指向问题的相关资料,有需要的朋友可以参考一下。

前言

Js这指出了一个老生常谈的问题。下面再给大家介绍一篇文章。可以看一看,有更深的了解。下面不多说了。我们来看看详细的介绍。

this

This: context,指向会根据执行环境的变化而变化。

1.仅这一点就指向了窗口对象。

警戒(这个);//此窗口

2.这在全局函数中

函数演示(){

警戒(这个);//此窗口

}

demo();

在严格模式下,这是未定义的。

函数演示(){

使用严格的;

警戒(这个);//未定义

}

demo();

3.调用函数时,在前面加上new关键字。

所谓构造函数就是通过这个函数生成一个新的对象。这时,这个指向这个对象。

函数演示(){

//alert(这个);//这个对象

this.testStr=这是一个测试;

}

设a=new demo();

alert(a . teststr);//这是一个测试

4.以调用和应用的方式调用函数

函数演示(){

警戒(这个);

}

demo . call( ABC );//abc

demo.call(空);//此窗口

demo.call(未定义);//此窗口

5.这个计时器指向窗口。

setTimeout(function() {

警戒(这个);//this-window,严格模式也指向window。

},500)

6.元素绑定事件。在事件被触发后,这个在被执行的函数中指向当前元素。

window.onload=function() {

let $ BTN=document . getelementbyid( BTN );

$btn.onclick=function(){

警戒(这个);//this-当前触发器

}

}

7.当调用函数时,如果bind被绑定,那么函数中的this指向bind中绑定的元素。

window.onload=function() {

let $ BTN=document . getelementbyid( BTN );

$btn.addEventListener(click ,function() {

警戒(这个);//窗口

}.绑定(窗口))

}

8.对象中的方法,哪个对象调用了方法,那么方法中的这个就指向对象。

let name=finget

让obj={

名称: FinGet ,

getName: function() {

alert(this . name);

}

}

obj . getname();//FinGet

-分界线-分界线-分界线

设fn=obj.getName

fn();//fin获取此窗口

腾讯笔试题

var x=20

var a={

x: 15,

fn:函数(){

var x=30

返回函数(){

返回this.x

}

}

}

console . log(a . fn());

console . log((a . fn())()));

console . log(a . fn()());

console . log(a . fn()()==(a . fn())()));

console.log(a.fn()。叫(这个));

console.log(a.fn()。调用(a));

答案

1 . console . log(a . fn());

对象调用该方法,并返回一个方法。

# function() {return this.x}

2 . console . log((a . fn())());

A.fn()返回一个函数,而() ()这是一个自执行表达式。这个窗户

# 20

3 . console . log(a . fn()());

A.fn()相当于全局定义一个函数,然后自己调用执行。这个窗户

# 20

4 . console . log(a . fn()()==(a . fn())());

#真的

5.console.log(a.fn()。叫(这个));

这段代码在全局环境中执行,这个窗口

# 20

6.console.log(a.fn()。调用(a));

这是

# 15

总结

这就是本文的全部内容。希望这篇文章的内容对你的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。

js中this的指向问题归纳总结