• es6-顶层对象与this问题


    ES5的顶层对象,本身也是一个问题,因为它在各种实现里面是不统一的。
      ● 浏览器里面,顶层对象是window,但Node和Web Worker没有window。
      ● 浏览器和Web Worker里面,self也指向顶层对象,但是Node没有self。
      ● Node里面,顶层对象是global,但其他环境都不支持。
    为了能够在各种环境,都能取到顶层对象,现在一般是使用this变量。
      ● 全局环境中,this会返回顶层对象。但是,Node模块和ES6模块中,this返回的是当前模块。
      ● 函数里面的this,如果函数不是作为对象的方法运行,而是单纯作为函数运行,this会指向顶层对象。但是,严格模式下,这时this会返回undefined。
      ● 不管是严格模式,还是普通模式,new Function('return this')(),总是会返回全局对象。但是,如果浏览器用了CSP(Content Security Policy,内容安全政策),那么eval、new Function这些方法都可能无法使用。
    
    
    下面是两种勉强可以使用的方法。
    // 方法一
    (typeof window !== 'undefined'
       ? window
       : (typeof process === 'object' &&
          typeof require === 'function' &&
          typeof global === 'object')
         ? global
         : this);
    
    // 方法二
    var getGlobal = function () {
      if (typeof self !== 'undefined') { return self; }
      if (typeof window !== 'undefined') { return window; }
      if (typeof global !== 'undefined') { return global; }
      throw new Error('unable to locate global object');
    };
    
    
  • 相关阅读:
    设计师
    仅用递归函数和栈操作逆序一个栈
    用两个栈实现队列
    设计一个有getMin功能的栈(2)
    设计一个有getMin功能的栈(1)
    Java 泛型
    servlet里获得jsp页面里select的选项之值
    mac上mysql的GUI工具sequel pro
    mac安装mysql的两种方法(含配置)
    [转]在Mac系统中安装配置Tomcat及和Eclipse 配置
  • 原文地址:https://www.cnblogs.com/sakura-sakura/p/6678470.html
Copyright © 2020-2023  润新知