JavaScript面向对象编程—this指向详解

this详解

作者的话

 

    在JavaScriptOPPt面向对象编程中,this这位老大哥,相信大家不会陌生。大家在遇到this时,很多朋友难免会有个疑问:“这个this是什么,它到底指向谁?”

今天,博主针对this的指向问题,进行了整理。本篇博客,博主给大家详尽介绍了不同情况下,this的指向!!以下奉上博主总结的关于this的指向详解,希望对各位开发者朋友有所帮助:

1、谁最终调用函数,this指向谁。

①this指向的,永远只可能是对象!!!!!

②this指向谁,永远不取决于this写在哪,而是取决于this在哪调用;

③this指向的对象,我们称之为函数的上下文context,也叫函数的调用者

2、*****this指向的规律(与函数调用的方式息息相关)

this指向的情况,取决于函数调用的方式有哪些:

①通过函数名()直接调用的:this指向window

②通过对象.函数名()调用的:this指向这个对象;

③函数作为数组的一个元素,通过数组下标调用的:this指向这个数组

④函数作为window内置函数的回调函数调用时:this指向window

setTimeout(func,1000);setInterval等

⑤函数作为构造函数,用new关键字调用时:this指向的是new出的新对象

实例演示:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>this详解</title>
</head>
<body>
<div ></div>
</body>
<script type="text/javascript">

function func (name) {
console.log(this);


}
func();//window
//狭义对象
var obj={
name:"obj",
func1:func
};
obj.func1();//obj
//广义对象
document.getElementById("div").onclick=function () {
this.style.backgroundColor="red";
};//this指向div    

//函数作为数组的一个元素,通过数组下标调用的:this指向这个数组
var arr=[func,1,2,3]
arr[0]();

//函数作为window内置函数的回调函数调用时:this指向window
setTimeout(func,1000);
//setInterval等

//函数作为构造函数,用new关键字调用时:this指向的是new出的新对象
var obj=new func;//this指向的是new出的新obj


//小示例
var obj1={
name:"obj1",
arr:[setTimeout(func,5000),1,2,3]
}
document.getElementById("div").onclick=obj1.arr[0]();//函数最终调用者:setTimeout;符合规律⑤,this指向window

var obj1={
name:"obj1",
arr:[func,1,2,3]
}
document.getElementById("div").onclick=obj1.arr[0]();//函数最终调用者:arr数组下标;符合规律③,this指向arr

var obj1={
name:"obj1",
arr:[{name:'arrObj',fun:func},1,2,3]
}
document.getElementById("div").onclick=obj1.arr[0].fun();//函数最终调用者:对象;符合规律②,this指向{name:'arrObj',fun:func}这个对象

</script>
</html>

    以上为本期分享内容,希望本篇博客可以对广大开发者朋友有所帮助!如果有需要补充的部分,可在下方评论区予以补充。

如果本篇内容对你有所帮助,欢迎收藏,原创内容,欢迎大家积极评论转载和推荐!