• 你不知道的JavaScript(this)


    对this的常见误解

      this指向函数本身;

      this指向函数的词法作用域;

    this是在运行时进行绑定的,并不是在编写时,它的上下文取决于函数调用时的条件。

    this的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。

    function identify() {
      return this.name.toUpperCase();
    }
    function speak() {
      var greeting = “Hello, I’m” + identify.call(this);
      console.log(greetin);
    }
    
    var me = {
      name: “Kyle"
    };
    
    var you = {
      name: “Reader"
    };
    
    identify.call(me);
    identify.call(you);
    
    speak.call(me);
    speak.call(you);

    对象属性引用链中只有最顶层或者说最后一层会影响调用位置

    function foo() {
      console.log(this.a);
    }
    
    var obj2 = {
      a: 42,
      foo: foo
    };
    
    var obj1 = {
      a: 2,
      obj2: obj2
    };
    
    obj1.obj2.foo(); // 42

    判断this的顺序:

      ・函数是否在new中调用(new绑定)?如果是的话this绑定的是新创建的对象

        var bar = new foo()

      ・函数是否通过call、apply(显示绑定)或者硬绑定调用?如果是的话,this绑定的是指定的对象

        var bar = foo.call(obj2)

      ・函数是否在某个上下文对象中调用(隐式绑定)?如果是的话,this绑定的是那个上下文对象

        var bar = obj1.foo();

      ・如果都不是的话,使用默认绑定。严格模式下,绑定到undefined,否则绑定到全局对象。

  • 相关阅读:
    内存溢出
    接手新业务
    pjb fabu
    中文手册
    人背的时候,做啥都失败
    帮助开发人员学习
    python中的__dict__,__getattr__,__setattr__
    NetCore在Docker中发布及运行
    ELK基础配置
    IdentityServer4 手动验签及日志记录
  • 原文地址:https://www.cnblogs.com/dreamerjdw/p/6269209.html
Copyright © 2020-2023  润新知