js函数中的this

特殊对象this

一、标准函数中,this引用的是把函数当成方法调用的上下文对象

复制代码
window.color = 'red';

let o={
      color:'blue'    

}

function sayColor(){

        console.log(this.color);

}
sayColor();   // red

o.sayColor=sayColor;

o.sayColor();  //blue

定义在全局上下文中的函数sayColor()引用了this对象。这个this到底引用了哪个对象必须到函数被调用时才能确定。因此这个值在函数执行过程中可能会变。如果在全局上下文中调用sayColor(),结果输出red, 因为this指向window,而this.color相当于window..color.而再把sayColor()赋值给o之后,在调用o.sayColor(); this会指向o,即this.color相当于o.color,所以会显示blue

二、箭头函数中,this引用的是定义箭头函数的上下文

复制代码
window.color = 'red';

let o={
      color:'blue'    

}

function sayColor=()=>{

        console.log(this.color);

}
sayColor();   // red

o.sayColor=sayColor;

o.sayColor();  //red

在对sayColor()的两次调用中,this引用的都是window对象,因为这个箭头函数是在window上下文中定义的

三、在事件回调或定时回调中调用某个函数,this值指向的并非想要的对象。此时可以将回调函数写成箭头函数就可以解决问题

复制代码
function king(){
      this.royaltyName='henry';

     setTimeout(
       ()=>{
               console.log(this.royaltyName,1000);
      })
}

function queen(){
      this.royaltyName='elizabeth';

     setTimeout(
       function(){
              console.log(this.royaltyName,1000);
      })
}
new King();// henry
new Queen();//undefined

因为箭头函数中的this会保留定义该函数时的上下文

相关推荐
程序00712 分钟前
天地图实现收货地址定位
前端·javascript·css
心梦轻舞15 分钟前
从 14 道面试题,彻底搞懂 Event Loop 与 Vue2 nextTick 底层原理
javascript
qq_340040881 小时前
idea2021版,vue项目的package.json不展示scripts的绿色箭头
javascript·vue.js·json
2601_968900772 小时前
玻璃深加工的工艺窗口:4 道工序的温度与时间参数边界
android·java·javascript
程序员大阳2 小时前
副队长JavaScript教程(53)-DOM操作元素的属性
javascript·dom·属性·setattribute·getattribuite
Non-existent9872 小时前
在 WPS/Excel 里做地理数据处理:功能市场 + 奥维 / Google Earth / QGIS 三种跳转实战
开发语言·javascript·ecmascript
zhougl9962 小时前
什么是 URL
javascript
螺丝钉tina3 小时前
[Playwright][01] 从 Puppeteer 到 Playwright:为什么选择 Playwright + TypeScript?
前端·javascript·typescript
大团米线3 小时前
vite多环境合并打包config
javascript·vue.js·ecmascript
程序员大阳3 小时前
副队长JavaScript教程(57)-DOM事件机制
javascript·键盘事件·dom·鼠标·事件·绑定·冒泡