首先注意一点: this取什么值是再函数执行的时候被确定的,不是再定义的时候被确定的【非常重要】

下面是5种赋值情况,大家可以再自己电脑上写一写打印出来看看

1.作为普通函数被调用

function fn(){

console.log(this)   // window

}

fn()   // window

2.使用call apply bind 被调用

fn1.call({x:100}) // this是{x:100} 调用的对象

const fn2 = fn1.bind( {x:200})

fn2() // this 是 {x:200} 调用的对象

3.作为对象方法被调用

const zhangsan = {

name:'张三',

sayHi(){

console.log(this) // this是zhangsan这个对象,因为是zhangsan.sayHi()被执行

},

wait(){

setTimeout(function(){

console.log(window) //this===window 因为setTimeOut之后当这个方法被执行时候,就是再window下面执行的

})

},

waitAgain(){

setTimeOut(()=>{

console.log(this) // zhangsan 箭头函数的this指向上级作用域的this

})

}

}

4.再class方法中被调用

class People{

constructor(){

this.name = name; // this 创建的实例

this.age = 20;

}

sayHi(){ console.log(this) } // this就是zhangsan这个实例

}

const zhangsan = new People('zhangsan')

zhangsan.sayHi() // zhangsan对象

5.箭头函数

箭头函数的this指向上级作用域的this

javascript中This的几种赋值情况相关推荐

  1. javascript中面向对象的5种写法

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  2. [译]JavaScript中的属性:定义和赋值的区别

    原文:http://www.2ality.com/2012/08/property-definition-assignment.html 你知道吗?定义一个属性和为一个属性赋值是有区别的.本文解释了两 ...

  3. JavaScript中常见的几种“缺少对象”错误

    在JavaScript中,程序调度过程中经常会出现缺少对象错误,这里的对象有时候是变量,有时候是函数,有时候可能是对象等等. 缺少对象错误经常有以下几种情况 1.变量没有定义 使用没定义的变量时就会出 ...

  4. JavaScript中数组的几种写法

    1.直接new一个数组,不指定数组长度,使用数组下标给数组赋值,数组中可以存放任意类型的数据.(遍历时未赋值的元素将会显示undefined): <!DOCTYPE html> <h ...

  5. JavaScript中函数的三种定义方法

    JavaScript中函数定义的三种方法. 函数的三种定义方法分别是:函数定义语句.函数直接量表达式和Function()构造函数的方法.下面依次介绍这几种方法具体怎么实现. 1. 函数定义语句 // ...

  6. JavaScript中this的五种绑定方式详解

    1 this的五种绑定方式 1.1 默认绑定 默认绑定是指当函数调用时,没有为其指定对象上下文,此时会将该函数的this绑定到全局对象(window对象).自ES5有了严格模式之后,默认绑定方式又分为 ...

  7. 创建函数查找上级_一文秒懂JavaScript中对象的7种创建方式

    1.工厂模式 javascript 代码 工厂模式:能根据接受的参数来创建出一个person对象.也可以无数次的调用这个函数,每次都会返回一个包含3个属性和1个方法的对象. 工厂模式虽然解决了创建多个 ...

  8. javaScript中常见的几种报错类型

    一般我们运行代码的时候,在控制台报错会相应的显示你错误的行数,找到那一行,查找你相应的错误 1.xxx is not defined xxx 没有定义   2.xxx is not a functio ...

  9. javascript中数组的22种方法

    前面的话数组总共有22种方法,本文将其分为对象继承方法.数组转换方法.栈和队列方法.数组排序方法.数组拼接方法.创建子数组方法.数组删改方法.数组位置方法.数组归并方法和数组迭代方法共10类来进行详细 ...

最新文章

  1. 摘:C/C++中时间类time.h
  2. wxWidgets:wxSocketBase类用法
  3. SAP WebIDE UI5应用的几种启动方式
  4. 学习C ,常见的误解
  5. vsftpd 源码安装 linux/redhat
  6. C语言编程序编数独,求用C语言编一个解九宫格数独的程序怎么办? 爱问知识人...
  7. plsql developer13的下载、instantclient的下载
  8. 通知NSNotificationCenter
  9. mac 关闭 mysqld 进程(亲测可用)
  10. 42表盘直径是从哪测量_爱彼15703和15710区别在哪?背透和密底哪个更好?
  11. 维护LINQ to SQL多对多表间关系[转]
  12. 【优化求解】基于matlab遗传算法求解红绿灯管理优化问题【含Matlab源码 262期】
  13. [转帖][攻防测试工具]系统监控必备工具procexp和procmon
  14. 神经网络控制学习笔记——神经网络背景1
  15. 技嘉x58不支持服务器内存,一般机箱放不下 技嘉X58送海盗船内存
  16. openwrt多wan限上下行速脚本,基于qosv4,imq模块替换成ifb模块
  17. Centos7(linux)下hbase的伪分布式搭建以及eclipse远程连接
  18. 【超级炫酷的旋转特效——html实现(附源代码)】
  19. XCTF MISC 高手区 Dift
  20. HTML5 标准规范

热门文章

  1. Md2All使用方法
  2. EWMA 指数加权移动平均 模型
  3. 小孩护眼灯什么牌子的好?眼科专家推荐的护眼灯品牌
  4. 区块链分析中的去匿名化问题
  5. 超全的auto.js基础操作,目前是autoX.js的控制方式。2023年7月9日更新!(第2/4章)
  6. Centos7下使用rpm包安装mysql5.6数据库
  7. CDH6.3.2之Kafka配置和命令
  8. Map循环获取key+value
  9. 程序员的nginx技能包(3)——静态资源管理,资源井井有条,生活风花雪月
  10. 成龙六十岁生日宴 大走节俭路线吃长寿面