最近发现很多朋友在学习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
总结
这就是本文的全部内容。希望这篇文章的内容对你的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。