在JavaScript函数中this指向的是什么
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在JavaScript函数中this指向的是什么,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2366字,纯文字阅读大概需要4分钟。
内容图文
![在JavaScript函数中this指向的是什么](/upload/InfoBanner/zyjiaocheng/284/9dccc387aadc4fe99397f5a32dfeb7e1.jpg)
对于this关键字的学习经常让我们感到困惑,搞不清楚它在函数中指代的是什么以及如何去使用它,今天将在文章中为大家详细介绍有关this的知识
【推荐课程:JavaScript教程】
上下文和this关键字
在JavaScript中,函数有自己的执行上下文,在这里要特别注意下函数的执行上下文不是关于它是如何声明的,也不是说函数的作用,而是关于如何在代码中调用它,我们在调用此执行上下文时就会用到this。当this从函数内部访问时,实际上就是访问其执行上下文。
调用函数方式与this
上下文取决于函数的调用方式,我们可以通过4种不同的方式来调用上下文的函数,因此this也有四种不同的指向
1. 一个基本的函数调用
2. 使用上下文对象调用函数,也称为隐式绑定。
3. 使用call()或调用函数apply(),也称为显式绑定。
4. 通过bind()方法绑定
基本函数调用
基本函数调用是调用函数的最简单方法
例:
<script type="text/javascript"> var name="张三"; function student(){ console.log(this.name); } student(); </script>
在这个例子中可以看出student()是从全局范围内调用函数,因此这里的this指代的是全局范围,所以输出结果为“”张三“”
隐式绑定
当函数被一个对象“包含”的时候,我们称函数的this被隐式绑定到这个对象里面了
<script type="text/javascript"> var student={ name:"张三", obj:function(){ console.log(this.name) } } student.obj(); </script>
obj函数虽然被放到对象里去但是并不会因为它被定义在对象的内部就会与外部产生区别,在隐式绑定下,obj通过this还是可以访问到student对象中的a属性
显示绑定
可以使用call()或apply()方法调用函数,其执行上下文显式绑定到对象,call和apply可以改变this指向
例:未使用call ()或者apply()时
<script type="text/javascript"> var name="张三"; var obj = { name:"李四", fun:function(){ console.log(this.name);}} obj.fun(); </script>
利用call()使this指向window
<script type="text/javascript"> var name="张三"; var obj = { name:"李四", fun:function(){ onsole.log(this.name);}} obj.fun.call(window); </script>
bind()绑定
bind()会创建一个函数,函数体内的this对象的值会被绑定到传入bind()第一个参数的值,但是bind不执行函数,只返回一个可供执行的函数
<script type="text/javascript"> var a = { b : function(){ var func = function(){ console.log(this.c); } func.bind(this)(); }, c : 'Hello!' } a.b(); </script>
通过bind方法将this指向c对象中的内容。
总结:以上就是本篇文章的全部内容了,从上面的文章中我们可以看出,谁调用的this就指向谁;全局中this指向window;而且call(),apply()以及bind()方法可以改变this的指向。
以上就是在JavaScript函数中this指向的是什么的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的在JavaScript函数中this指向的是什么全部内容,希望文章能够帮你解决在JavaScript函数中this指向的是什么所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。