• 技术文章 >web前端 >前端问答

    es6获取顶层对象的方式有哪些

    WBOYWBOY2022-08-18 16:24:11原创225

    es6获取顶层对象的方式:1、利用“typeof window !== 'undefined' ? window : (...) ? global : this”方法获取;2、利用“var getGlobal = function () {...throw new Error('unable to locate global object');};”方法获取。

    大前端零基础入门到就业:进入学习

    本教程操作环境:windows10系统、ECMAScript 6.0版本、Dell G3电脑。

    es6获取顶层对象的方式有哪些

    ES6之前,顶层对象的属性和全局变量是等价的,但是在ES6,顶层对象和全局对象开始分离。

    不分离的弊端

    改变方式

    顶层对象

    浏览器:window对象

    Node:global对象

    不统一的顶层对象

    浏览器中 顶层对象是window,但是Node和Web Worker没有window。

    浏览器和Web Worker中,self也指向顶层对象,但是Node没有self。

    Node中,顶层对象是global,但其他环境不支持。

    获取顶层对象

    局限性

    全局环境中,this返回顶层对象;

    Node模块和ES6模块中,this返回当前模块

    函数中的this

    (1) 单纯作为函数运行,this返回顶层

    (2) 严格模式下,返回undefined

    new Function(‘return this’)();总是返回全局对象。

    但是如果浏览器用了CSP,那么eval,new Function这些方法都可能无法使用

    CSP:Content Security Policy,内容安全政策。它以白名单的机制对网站加载或执行的资源起作用,在网页中通过HTTP头信息或者meta元素定义。但是也造成了以下问题

    1. eval及相关函数被禁用。
    2. 内嵌的JavaScript代码将不会执行。
    3. 只能通过白名单来加载远程脚本。

    获取顶层对象的方法

    // 方法1
    // 针对 浏览器中 顶层对象是window,但是Node和Web Worker没有window。
    ( 
    	typeof window !== 'undefined' ? window : (
    		typeof process === 'object' &&
    		typeof require === 'function' &&
    		typeof global === 'object'
    	) ? global : this
    );
    
    //方法2
    // 针对 浏览器和Web Worker中,self也指向顶层对象,但是Node没有self。
    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');
    };

    【相关推荐:javascript视频教程web前端

    以上就是es6获取顶层对象的方式有哪些的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:ES6
    上一篇:前端es6是模块化开发吗 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• javascript与es6的区别是什么• ES6中箭头函数的详细梳理• 实例代码之ES6箭头函数实践• ES6箭头函数及this指向详解• ES6数组新增方法知识点总结
    1/1

    PHP中文网