javascript中关于this指向问题详解
前 言
LiuDaP
在前端的学习中,我们必然要用到js,js可以说是前端必不可少的的东西。在学习js的过程中,我们会经常用到this这个东西,而this的指向问题就变得尤为重要。今天正好有空闲时间,就给大家详细介绍一下js中关于this的指向问题,希望能够帮助到大家。
| 一、this的指向原理 |
>>>仅仅一条就是:谁最终调用函数,this就指向谁。。
下面给大家做一下详细的解释:
(1)、this到底指向谁,不应该考虑函数在哪声明,而是应该考虑函数在什么地方调用
(2)、this指向的永远只可能是对象,而不是函数。
(3)、this指向的对象,叫做函数的上下文,也叫函数的content,还叫函数的调用者。
| 二、总结几条关于this指向问题的规律 |
>>>注意:以下几条规律特别好用,如果必要的话可以直接背过。
1、通过函数名()调用的函数,this永远指向window。
具体例子如下:
function func(){
this.name="wangwu";
console.log(this);
}
func(); //通过func()调用的,this永远指向window。
>>>以下代码直接通过func()调用函数,则this指向window对象。
2、函数作为window内置函数的回掉函数使用,this指向window。例如:setInterval setTimeout等。
具体例子如下:
function func(){
this.name="wangwu";
console.log(this);
}
//函数作为window内置函数的回掉函数使用,this指向window。
setTimeout(func,1000);
>>>以上代码,func直接作为setTimeout的回掉函数使用,则this指向window对象。
3、通过对象.方法调用函数,则this指向这个对象。
具体例子如下:
function func(){
this.name="wangwu";
console.log(this);
}
var obj={
name:"zhangsan",
func:func
}
//通过对象.方法调用的,this指向这个对象
obj.func(); //狭义对象,指向obj。
>>>以上代码,通过obj.func()进行调用,this指向这个obj。
4、函数作为数组中的一个元素,用数组下标进行调用的,this指向这个数组
具体例子如下:
function func(){
this.name="wangwu";
console.log(this);
}
var arr=[1,2,3,func,4,5,6]; //此时函数作为数组中第四个元素
arr[3](); //直接用数组的下标调用函数,此时this指向arr。
>>>以上代码,func作为数组arr中的元素,通过arr[3]()进行调用,this指向arr
5、函数作为一个构造函数,使用new关键字进行调用,this指向用new关键字new出的对象。
具体例子如下:
function func(){
this.name="wangwu";
console.log(this);
}
var obj=new func(); //此时通过new关键字进行调用,this指向obj这个新new出的对象
>>>以上代码,通过new关键字进行函数的调用,最终this指向这个新new出的对象
this的指向问题,最终的内容就是这么多,虽然看起来很简单,但是真正遇到问题的时候也会有让人为难的时候。
编者按
我们都是在这条路上奔跑着的孩子,让我们相互学习,共同努力吧!!!希望今天这点儿关于js中this指向问题的小内容对大家有一点点帮助吧,,毕竟我也是一个初入江湖的小菜鸟啊!!
javascript中关于this指向问题详解的更多相关文章
- JavaScript中的鼠标滚轮事件详解
JavaScript中的鼠标滚轮事件详解/*Firefox注册事件*/ ~~~Firefox: addEventListener('DOMMouseScroll', handler, false)if ...
- JavaScript中typeof和instanceof深入详解
这次主要说说javascript的类型判断函数typeof和判断构造函数原型instanceof的用法和注意的地方. typeof 先来说说typeof吧.首先需要注意的是,typeof方法返回一个字 ...
- JavaScript 中 apply 、call 的详解
apply 和 call 的区别 ECMAScript 规范给所有函数都定义了 call 与 apply 两个方法,它们的应用非常广泛,它们的作用也是一模一样,只是传参的形式有区别而已. 原文作者:林 ...
- Javascript中的this关键字用法详解
在javascript里面,this是一个特殊的对象,它不像其他编程语言那样,是存储在实例中的值,直接指向此实例. 而是作为一个单独的指针,在不同的情况之下,指向不同的位置,这也是为什么我们会将它搞混 ...
- JavaScript中定义类的方式详解
本文实例讲述了JavaScript中定义类的方式.分享给大家供大家参考,具体如下: Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的exte ...
- JavaScript中var关键字的使用详解
作用 声明作用:如声明个变量. 语法 ? 1 var c = 1; 省略var 在javascript中,若省略var关键字而直接赋值,那么这个变量为全局变量,哪怕是在function里定义的. ? ...
- JavaScript中事件委托(事件代理)详解
在JavaScript的事件中,存在事件委托(事件代理),那么什么是事件委托呢? 事件委托在生活中的例子: 有三个同事预计会在周一收到快递.为签收快递,有两种办法:一是三个人在公司门口等快递:二是委托 ...
- javascript中6种基本数据类型详解
javascript中有5中数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number和String,还有一种复杂数据类型——object,object本质是由一组键值 ...
- JavaScript中继承的实现方法--详解
最近看<JavaScript王者归来>中关于实现继承的方法,做了一些小总结: JavaScript中要实现继承,其实就是实现三层含义:1.子类的实例可以共享父类的方法:2.子类可以覆盖父类 ...
随机推荐
- 我的天哪,现在的移动VIN码识别已经这么。。
VIN码是英文(Vehicle Identification Number)的缩写,译为车辆识别代码,又称车辆识别码,车辆识别代码,车辆识别号,车辆识别代号,VIN码是表明车辆身份的代码.VIN码由1 ...
- jQuery插件——ajax
一.ajax请求 1.load(url, [data], [callback]) 概述:加载远程的HTML文件代码,并插入到指定的DOM节点中. 参数:url:待装入 HTML 网页网址. data: ...
- java可访问修饰符
修饰符 同一个类中 同一个包中 不同包的子类 不提供包的非子类 private √ friendly(省略) √ √ protected √ √ √ public √ √ √ √
- 201521123121 《JAVA程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声 ...
- 201521123029《java程序设计》第2周学习总结
1. 本周学习总结 (1)完成了课后习题,对所学知识进一步巩固. (2)学会了JAVA中的选择结构,循环结构,其中条件必须为布尔表达式,与C++非0即真不同. (3)学会java中的break和con ...
- 201521123054 《Java程序设计》 第2周学习总结
本周学习总结 能够利用jdk文档处理实验问题: 动态数组的学习: 书面作业 1.使用Eclipse关联jdk源代码,并查看String对象的源代码(截图)?分析String使用什么来存储字符串的?分析 ...
- 201521123080《Java程序设计》第2周学习总结
1.本周学习总结 a.学习了如何建立远程仓库和本地仓库并建立连接. b.学习了一些基础语法. 2.书面作业 Q1.使用Eclipse关联jdk源代码,并查看String对象的源代码(截图)?分析Str ...
- VBScript中Msgbox函数的用法
MsgBox(prompt[, buttons][, title][, helpfile, context]) [用途]:弹出对话框,并获取用户的操作结果. [参数说明]: propmt:对话框中展示 ...
- Java课程设计——学生基本信息管理
1.团队名称.团队成员介绍 团队名称:学生基本信息管理设计小组 团队成员:花雨芸(组长)--负责管理界面的编写 丁蓉(组员)--负责登陆的设计编写 2.项目git地址 https://git.osch ...
- Java:@Override标签的多态性详解
Override(重写)是子类与父类的一种多态性体现. Override允许子类改变父类的一些行为. 为什么需要Override:当父类不满足子类的一些要求时我们就需要子类对父类的一些行为进行重写. ...