zoukankan      html  css  js  c++  java
  • javascript中this的指向

    this是指当前程序的运行环境,如果在函数中, 指代函数的运行环境。

    一般可以分成四类

      • 函数调用方式;alert('Hello World!')
      • 方法调用方式;console.log('Hello World!')
      • 构造函数方式;new RegExp('\d')
      • 间接调用方式(apply/call);alert.call(undefined, 'Hello World')

    1:全局变量默认挂载在window对象下

    2:一般情况下this指向它的调用者

    3:es6的箭头函数中,this指向创建者,并非调用者

    4:通过call、apply、bind可以改改变this的指向

    但是也有特殊情况, 相当于函数调用, this指向全局

    如:

    var a = 'window'
    var obj = {
       a: 'in obj'
       method: function(){
             console.log('1', this);
            (function(){  console.log('2', this) })()
            return function(){
                 console.log('3', this); 
            }
        }  
    }    
    
    obj.method()();
    
    将输出: 1, in obj, 2 window, 3 window

     因为在3时,obj.method()相当于返回了函数, 是一个函数调用了, 指向全局对象。自执行函数在运行时, 也是函数调用, 指向全局作用域。

    一般箭头函数指向定义时的上下文环境,一般是全局, 但是可以通过改变箭头函数的父级作用域, 间接的改变箭头函数的this.

    var a = 'window'
    var obj = {
       a: 'in obj'
       method: function(){
             console.log('1', this);
           
            return () => {
                 console.log('3', this.a); 
            }
        }  
    }    
    
    obj.method()(); // 3,  in obj
    obj.method.call({a: 'change parent'})(); // 3, change parent
    obj.method().call({a: 'change arrow'}); // 3, in obj 
    

      箭头对bind, callm apply无效

  • 相关阅读:
    替代PhotoShop:GIMP图形编辑器的使用
    Matlab: 主函数和子函数间接传递变量
    代码管理:SVN的使用
    Python: 科学计算
    Python: 代码调试
    Latex: article模板
    Matlab: 程序优化和调试
    LibreOffice的使用技巧
    mysql--多表联合查询
    mysql--数据查询
  • 原文地址:https://www.cnblogs.com/connie313/p/14737601.html
Copyright © 2011-2022 走看看