关于this指向的问题

this指向的规则

  1. 默认绑定
  2. 隐式绑定
  3. 显示绑定
  4. 构造函数绑定
  5. new 绑定

1、默认绑定

默认即约定俗成,this指向全局对象window,严格模式下this为undefined。

this.a === window.a // true

var a = 1;

this.a // 1

严格模式

use strict

this === window // false

this === undefined // true

2、隐式绑定

顾名思义,隐式绑定大体上可以理解为一个对象有一个属性为函数,此时这个函数的this指向的是调用它的对象所处的自身,直接上代码:

例一

var name = 'windowName'

let obj = {

    name: 'name',
    
    getName: function() {
    
        console.log(this.name)
        
    }
};

obj.getName(); // name 此时是obj调用的getName方法,所以this指向obj

let obj2 = obj.getName;

obj2(); // windowName 此时是window调用的obj2方法,所以this指向window,即window.obj2()

复制代码

进阶,在对象的函数里再嵌套一层函数

例二

var name = 'windowName'

var obj = {

    name: 'name',
    
    getName: function() {
    
        return function() {
            console.log(this.name)
        }
        
    }
};

obj.getName()(); // windowName 

var obj2 = obj.getName;

obj2()(); // windowName
复制代码
咦?为什么都是windowName呢?

原来,obj.getName()返回的是一个function

而function的this指向的是window,所以报出来的是windowName.obj2()

同理,例一 中的obj2也是同理,obj2 === obj.getName 返回的也是一个function,所以obj2的this指向的也是window

所以咱们可以得出,隐式绑定根据的是调用者的上下文环境

转载于:https://juejin.im/post/5c529e6fe51d455bd36ba3a8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值