关于this指向的问题

this指向的规则

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

一、默认绑定

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

this.a === window.a // true函数

var a = 1;ui

this.a // 1this

严格模式

use strictspa

this === window // falsecode

this === undefined // true对象

二、隐式绑定

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

例一

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()返回的是一个functionstring

而function的this指向的是window,因此报出来的是windowName.obj2()it

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

因此我们能够得出,隐式绑定根据的是调用者的上下文环境

相关文章
相关标签/搜索