node.js:在全局范围内使用“this”令人困惑

2024-03-27

我最近一直在玩弄node.js,并且遇到了关于使用的奇怪行为this在模块的全局范围内。

this在全局范围内绑定到 module.exports:

console.log(this === exports); // -> true

But this在方法范围内绑定到全局:

(function() { console.log(this === global); })(); // -> true

这也导致了这种令人困惑的行为:

this.Foo = "Weird";
console.log(Foo); // -> throws undefined

(function() { this.Bar = "Weird"; })();
console.log(Bar); // -> "Weird"

我想解决方案是永远不要使用this在全局范围内并明确使用extends or global相反,但这一切背后是否有逻辑,或者是 Node.js 中的错误或限制?


其背后的“逻辑”是,this总是取决于函数是如何被调用的.

就你而言,你有一个自动执行的匿名函数,this始终引用全局对象(非严格模式)或undefined(ES5 严格)。

如果你想访问“外部”this值,您可以在执行该函数之前存储引用,例如

var outerScope = this;

(function() { outerScope.Bar = "Weird"; })();
console.log(Foo); // -> throws undefined

or re- .bind()函数的范围是你自己,比如

(function() { this.Bar = "Weird"; }).bind(this)();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

node.js:在全局范围内使用“this”令人困惑 的相关文章

  • npm 命令不显示任何输出或结果

    npm v 没有给出任何输出 https i stack imgur com 1Z5yf png 请参阅附图 我已经安装了node js 打开我的 git bash 后 如果我运行 node v 它会给我节点版本 但是在我写 npm v 后
  • IE toDataUrl() 安全错误

    我需要从画布上获取图片 因此我从 Amazon S3 获取图像 我在那里启用了跨源资源共享 CORS 并将 croseOrigin 属性 匿名 设置为 img 它适用于 Chrome 和FireFox 但在 IE 上 我通过调用 toDat
  • Protractor 中 element(...) 和 element(...).getWebElement() 之间的区别

    为什么我们需要element getWebElement over element 当两者的工作原理完全相同时 为什么两个 API 具有相同的功能 Protractor是一个方便的包装WebDriverJS javascript 硒绑定 e
  • 如何在两个动画画布元素之间进行通信?

    我想在两个动画画布元素之间进行通信 我使用 Adob e Animate CC 制作了两个 html5 canvas js 动画 我已将这两个元素放入一个 html 页面中 我可以成功地从这些动画中调用函数 在下面的代码中成功触发了警报 我
  • RXJS while 循环进行分页

    我尝试查询所有人员的数据swap api http swapi co URL swapi co api people 返回一个带有 people 数组的对象 以及我从中获取下一个数据的 URL swapi co api people pag
  • Google Adsense 中的 Javascript 错误

    在我的几个运行 AdSense 的网站上 我收到以下错误 无法将消息发布到 http googleads g doubleclick net http 5Dgoogleads g doubleclick net 收件人有来源http www
  • 如何在cordova中动态加载CSS

    我正在尝试通过 xhr 请求在 cordova 中动态加载 CSS CSS 的加载不是问题 我可以通过 xhr 加载它并通过 HTML5 文件 API 将其存储到文件系统 然后我就可以得到一个完美的 URL 但是如果我通过 javascri
  • jQuery 可以改变 css 样式定义吗? (不是每个元素的单独CSS)

    我还没有看到任何文档说 jQuery 可以更改任何 CSS 定义 例如更改 td padding 0 2em 1 2em to td padding 0 32em 2em 但要么必须更改整个样式表 要么更改每个元素的类 要么更改每个元素的
  • 使用 Node.js 从 URL 读取内容

    我正在尝试使用 Node js 从 URL 读取内容 但我似乎得到的只是一堆字节 我显然做错了什么 但我不确定是什么 这是我目前拥有的代码 var http require http var client http createClient
  • 如果未登录则重定向 html 页面

    我的网页上有简单的登录表单 它使用 javascript 来登录用户并且工作正常 问题是 用户直接在地址栏中输入登陆页面 URL 他无需登录即可直接访问该页面 如果他没有登录 我想将他重定向到登录页面 以下是loding和目标页面的链接 l
  • Twitter Bootstrap 2 模式表单对话框

    我有以下对话框 div class modal div class modal header a class close a h3 Add Tags h3 div div class modal body div div
  • 跨页面加载跟踪子窗口

    如果重新加载父页面 是否可以跟踪子窗口 我目前打开窗口如下 var childWindow childWindow window open url 当我想重新打开同一个子窗口时 childWindow focus 明显的问题是 如果刷新父窗
  • Karate UI 中的 ShadowRoot dom 元素访问问题

    我正在尝试访问 ShadowRoot dom 树元素 但我面临的问题是我无法使用特定的 html 元素来调用 ShadowRoot 因为该元素是动态的 请参见下面的 html 片段 id vaadin text field error 0
  • 查找二维数组中的最短路径(Javascript)

    我正在尝试实现一种算法 该算法在以下二维数组中找到最短路径 从左上角到右下角 A A A B A B B B B B A B A A A A B B B B A A A A A 规则是 路径必须在 A 和 B 之间交替 输出必须是一个数字
  • 从 select2 选定选项获取属性值

    我正在使用 Select2 插件http ivaynberg github io select2 select2 latest html http ivaynberg github io select2 select2 latest htm
  • 如何在类组件中使用react-router-dom v6导航

    我安装了react router dom v6 我想在以前版本的react router dom v5中使用基于类的组件this props history 在执行某些操作后适用于重定向页面 但此代码不适用于 v6 在react route
  • 使用默认参数解构 falsy 和 null

    我试图了解如何使用默认参数来解构虚假值和空值 以下是我运行过的一些示例 1 const person email email protected cdn cgi l email protection const email person e
  • 如何使我的滚动到顶部按钮动画流畅

    我的页面上有一个滚动到顶部按钮 但是当我单击它时 它不会滚动到顶部 它只是直接带我到顶部 就像我加载了一个新页面一样 但我需要的是滚动动画 javascript window onscroll function scrollFunction
  • Google Map API V3 - 单击标记以叠加形式显示更多信息内容(如 Google 地图中一样)

    我们使用 Google Map Api V3 在 HTML 容器中加载 google 地图 我们有一个位置搜索表格 提交后 我们将获取可用位置并在地图中设置标记 加载标记后 单击每个标记时我们需要显示标题 地址详细信息和设计 就像我们在谷歌
  • Javascript增加最大数组大小[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个大小的数组2 32 4294967296 因为我试图通过运行筛算法来获取 2 32 之前的所有素数 但是 该数组中的任何操作都会出现以下错误 致命错误 CALL AND RETRY LAST 分

随机推荐

  • 在 Python 上分析字符串输入直到达到某个字母

    我需要帮助来尝试编写程序的某个部分 这个想法是 一个人输入一堆乱码 程序会读取它 直到它到达 感叹号 例如 input Type something 人物类型 wolfdo65gtornado salmontiger223 如果我要求程序打
  • `enable_query_strings` 无法正常工作

    我正在尝试使用 CodeIgniter 和 xdebug 当我输入以下 URL 时 http localhost redux index php xdebug 运行良好 当我访问以下网址时 http localhost redux inde
  • QT后台进程进行键盘输入嗅探

    我正在开发一个简单的应用程序 该应用程序将在后台运行并捕获用户的键盘输入 如键盘记录器 但用于 LAN 我正在发送 UDP 数据包来传输击键 但从后台进程捕获键盘输入的问题似乎仍然无法解决 所以需要帮助 如果您想在 Windows 上执行此
  • 子类化 NSNumber

    我想向 NSNumber 类添加一个属性 因此我必须对其进行子类化 文档指出我必须重写所有 NSValue 原始方法 由于 NSValue 文档没有说明哪些方法是原始方法 所以我认为这两个可能是实例化的原始方法 initWithBytes
  • 将文本表转换为 pandas 数据框

    很多时候 当我尝试回答 Stackoverflow 上的问题时 问题包含一个表 我必须将其转换为 pandas 数据框才能进行处理 例如 在这个问题中 http stackoverflow com questions 43172116 pa
  • 使用验证器 jQuery 验证 Click 事件上的表单

    我正在使用 jQuery validate 来验证输入 我的代码 button click function form validate rules phone required true number true rangelength 7
  • 测试 Google Analytics iOS SDK

    有人找到了在 iOS 上测试 Google Analytics 的好方法吗 SDK 非常简单 但文档没有讨论如何测试或验证 该库在模拟器上或运行调试构建配置时的行为是否有所不同 我使用此委托方法设置了委托 GANTrackerDelegat
  • 紧凑框架中的网络浏览器

    我想用一个WebBrowser NET Compact Framework 3 5 项目中的组件 我面临着关于此的相互矛盾的信息 如果我只是尝试使用它 我会得到以下异常 System Threading ThreadStateExcepti
  • 椭圆弧箭头边缘d3力布局

    我正在使用强制布局来创建有向图 它渲染在画布上 我的示例位于http jsbin com vuyapibaqa 1 edit html 输出 http jsbin com vuyapibaqa 1 edit html output 现在我的
  • 无法在 DayNight 主题中动态切换模式

    我在我的应用程序中实现了 DayNight 主题 并添加了一个在白天和夜间模式之间切换的设置 但如果不重新启动 我无法在模式之间动态切换 如果我使用setDefaultNightMode 设置更改后 设置活动不会更改模式 但后台堆栈中的活动
  • VS Code 中的 SQL 调试

    我已经在 Windows 上安装了 VS code 工具并探索其功能 到目前为止 我想说它是一个很棒的工具 与传统的 SSMS 相比 它具有一些很酷的功能 我面临的困难是 在 VS Code 中使用 debug 当我单击调试时 它会在活动栏
  • C:执行 {...} while(0)? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么 C C 宏中有时会出现无意义的 do while 和 if else 语句 https stackoverflow com questions 154136 why are there som
  • 为什么 SQL Server 2008 Management Studio Intellisense 不工作?

    我正在疯狂地试图找出为什么智能感知根本无法工作 我使用的服务器是本地的 并且是 2008 年的 数据库设置为 2008 兼容性 智能感知在我能找到的每个菜单中都打开 但即使使用 CTRL J 也不会弹出任何成员列表 有没有人经历过类似的事情
  • Chrome Timeline 开发工具中的图像解码时间

    我正在构建一个视差滚动网站 不是我们所有人吗 除其他外 它会在用户滚动时显示图像 我通过将图像放在背景中并在顶部放置一个实心填充的 div 来完成 显示 然后 我根据滚动位置将该 div 从 100 高度设置为 0 高度 从而显示背景图像
  • 是否可以在 ng 服务之前和 Angular 7 中的实时重新加载/自动重新加载之前运行自定义脚本?

    在从 Angular cli 启动 ngserve 命令之前以及在 Angular 实时重新加载 自动重新加载之前 我必须运行自定义脚本吗 除了修改 package json 之外 是否可以使用 Angular 7 找你的package j
  • 如何为实际使用数据库上下文的 ASP.NET Core 控制器编写单元测试?

    关于如何编写良好的单元测试的信息似乎很少actualASP NET Core 控制器操作 关于如何使这项工作真正发挥作用有什么指导吗 我有一个系统 现在似乎运行得很好 所以我想我应该分享它 看看它是否能帮助其他人 有一个实体框架文档中非常有
  • Neo4j 3.0 中的存储过程

    我在 Windows 上使用 neo4j 3 0 并尝试使用存储过程新功能 我已经构建了 apoc jargithub 来源 https github com neo4j contrib neo4j apoc procedures 该 ja
  • R ggplot2:如何绘制具有纯色和透明笔触并根据颜色着色的geom_points?

    我想制作一个散点图 其中每个点都有一个球体 点及其球体都根据某些列值着色 一个显示我想要的最小示例 library ggplot2 library vcd only needed for example dataset ggplot Art
  • c、unix 中的睡眠函数

    我需要导入什么才能在unix中使用睡眠功能 我知道windows 是windows h 但是unix 呢 它应该位于 unistd h 中 请注意 这只能提供整数秒的精度 亚秒精度最便携的方法应该是 ab 使用 select
  • node.js:在全局范围内使用“this”令人困惑

    我最近一直在玩弄node js 并且遇到了关于使用的奇怪行为this在模块的全局范围内 this在全局范围内绑定到 module exports console log this exports gt true But this在方法范围内