JavaScript/ES6 从this开始理解apply() call() bind()、 class 、箭头函数

一 this 关键字

1.1 概念

  • this 简单来说指的是属性或方法或全局的当前对象,始终会返回一个对象。
  • 在全局上下文的执行环境中,this的值会指向全局变量,在浏览器中则引用windows对象;
    在函数上下文的执行环境中,this的取值取决于该函数是如何被调用的。如果它被一个引用对象调用,比如其上层对象,则会指向其上层对象,否则会被设为全局对象或者在严格模式下的undefined。
        let obj = {
   
            age: 1,
            func: function () {
   
                console.log(this);
            },
        }
        obj.func();  //this指向其上层环境obj
        
        let foo = obj.func;
        foo();   //this指向顶层环境Windows

在这里插入图片描述

  • 在JavaScript中,也是一切皆对象,运行环境也是对象。在 JS 运行时,this就是函数运行时所在的环境(对象),运行时环境可以动态切换,则 this 的指向则是动态的。如上例中,JS 运行时,将 obj 中 func 函数赋值给 foo ,而foo 运行的环境是在windows即顶级环境下,this 也随之变化。

1.2 使用场合

(1) 全局环境:

无论在函数内还是函数外,在全局环境下运行时,this指的都是其顶层对象windows

this === window // true

function f() {
   
  console.log(this === window);
}
f() // true

(2)构造函数

构造函数中使用的this,代指实例对象,构造函数中this指向属性,就相当于实例对象就拥有了该属性

var Obj = function (p) {
   
  this.p = p;
};

var o = new Obj('Hello World!');
o.p // "Hello World!"

(3)对象的方法

  • 如例1.1 中 func 为 obj 对象的一个方法,可以理解为 obj、obj.func 在JS运行时保存着两种不同的环境,若调用obj 的地址 再调用obj.func 的地址时,obj.func 则会在obj 的环境下运行,若赋值后直接运行 func 则会在全局环境下运行
  • 而在多层对象的情况下,this 会指向上一层的对象,而不是最外层,下例中,this 运行环境是a.m ,而在 a.m 对象中p 没有定义,则返回undefined。
var a 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值