博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript中的this指向
阅读量:5946 次
发布时间:2019-06-19

本文共 1838 字,大约阅读时间需要 6 分钟。

this是谁

  技术一般水平有限,有什么错的地方,望大家指正。

  this代指当前对象super调用父类的构造函数,应表会运网数物,加载驱动建立链接执行SQL处理结果,直到现在每想起这三点就能想起我上大学的时候,故事背景都是不同的有时候是我玩的正high的时候有时候是我快要睡觉,但是结果都是一致的就是让老师教育几句。现在就介绍一下Javascript中的this。

  说this的我们一般都说指向,代表,因为它不是固定的,今天是王麻子明天可能就是二狗子,它是谁不能确定,但是有一点是肯定的它永远指向让它起作用的那个对象。

  在全局作用域中this就是window,打开浏览器this===window会打印true,this只能存在两个地方第一个就是全局对象中,第二个就是函数内。当然了所有的都是一样的不是在函数里面就是在函数外面没有别的~。

  在函数外面this就是window这是不变的,在函数里面this就是多变的了,但是this永远是调用函数的那个对象。

var name = "sky";  var obj = {      name:"zt",      say:function(){          console.log("I am "+this.name);      }  }  obj.say();//I am zt  var fn = obj.say;  fn();//I am sky

  判断函数里面的this指向谁就看函数调用的时"."符号左边是谁,obj.say()"."左边是obj所以this就是obj,say函数里面的this.name就是obj.name=>zt。fn()执行的时候没有"."那么fn函数里面的this就是window,window.name=>sky,fn()其实就是window.fn(),只不过window可以省略,判断this就是这么简单,就看函数调用的时候"."左边是哪个对象就可以。

  另外一点事件函数里面的this就是绑定事件的元素。

  this是灵活的当你用的不熟练的时候,他可能已经发生了改变,而我们却没有注意到:

var name = "sky";  var obj = {      name:"zt",      say:function(){          setTimeout(function(){              console.log("I am "+this.name);          },0);      }  }  obj.say();//I am sky

  你可能感觉say()的左边是obj,所以say()里面的this就是obj了,对啊say()里面的this就是obj!仔细看this.name的外面还有一个function(){},this在这个函数里面所以这个函数是由谁调用的this才指向谁。我们在仔细梳理过程,obj.say()的结果就是创建一个定时器,在JS代码执行完成之后定时器里面的函数执行,定时器里面的function(){}执行的时候没有"."所以里面的this是指向window。

  函数里面的this指向谁,看函数执行的时候左边是谁,当函数嵌套的函数的我们要有一种本能的反应,就是要注意this的指向。

  上面的这些多数的时候都是出现看面试题中,当然在开发中也要注意,this多用在构造函数中和new息息相关,我们先了解一下new的机制,new执行时会创建一个对象newObj,newObj的原型链指向构造函数的原型即newObj.__proto__ === 构造函数.prototype,并将构造函数里面的this指向新创建的对象,然后执行构造函数,最后返回newObj。所有如果需要暴露出去的一些属性或者方法我们在构造函数中一定要作为this的属性,这样new出来的对象才能够使用这些属性。

function Demo(){    this.des = "demo";    var _life = "create";}var demo = new Demo();console.log(demo.des)//democonsole.log(demo._lift)//undefined

this指向是可以被改变的

  函数中的this是可以被改变的:

  我们可以通过指定函数运行时this的指向。

转载地址:http://azbxx.baihongyu.com/

你可能感兴趣的文章
两种方式javascript实现图片预览
查看>>
数据结构面试 之 单链表是否有环及环入口点 附有最详细明了的图解
查看>>
RancherOS v0.8.0发布:支持离线安装,更佳部署体验
查看>>
AI+社交,快手商业化落地之道
查看>>
Microsoft Graph:连接每个应用都需要的基础数据
查看>>
Latex格式html文件转换pdf和docx文档
查看>>
【关于Number】JavaScript中关于Number的操作
查看>>
非泄露,NSA官方开源反汇编工具GHIDRA
查看>>
保持分布式团队同步
查看>>
Node.js v7 Beta版引入citgm
查看>>
微服务没有银弹 | Weibo Mesh 的工程化实践解读
查看>>
让你的系统“坚挺不倒”的最后一个大招——「降级」
查看>>
Git 2.5增加了工作树、改进了三角工作流、性能等诸多方面
查看>>
搭载AI引擎,腾讯云云镜开启全面防护模式
查看>>
不仅有Ubuntu,这家公司的Ubuntu Core预计使用翻倍
查看>>
JMS机制
查看>>
Grumpy:Google 用 Go 开发的 Python 运行时
查看>>
Kubernetes 1.14 版本发布:正式支持Windows 节点,持久化本地卷进入GA
查看>>
区块链和数据科学:如果同时应用这两种技术,将会实现什么?
查看>>
AVG插件泄漏Chrome用户数据
查看>>