Javascript `this` 对象 == 成员函数中的 `window`

2024-04-15

在我的一些 Javascript 对象中,我发现我的this指针是正确的 - 这些是new Func()-type 对象 - 创建时,但在分配的方法中可能是错误的。

function Confused() {
   console.log("checking",this==window,"is always false");
   this.method = function() {
       console.log("checking",this==window,"is true for some funcs but not others");
   };
};

在某些电话中(new Confused()).method()- 似乎已经失去了它this指针。这种情况发生的次数似乎取决于函数,而不是随机的;它是关于我如何创建导致此问题的类的代码中的某些内容。

在线示例位于http://williame.github.com/barebones.js/ http://williame.github.com/barebones.js/和成员回调G3D._file_loaded https://github.com/williame/barebones.js/blob/d313f04dceba0b9c9125501661728e1908a2d026/g3d.js#L10有一个错误this有时调用时的指针。

为什么会这样,我该如何解决?


在 Javascript 中有 4 种使用函数的方法 其中每一个的作用是改变内容的内容this is :

  • 函数调用: this = 全局对象(浏览器中的窗口)
  • 方法调用: this = 调用它的对象。
  • 构造函数调用: this = 您正在创建的新对象。
  • 调用/应用调用: this = 您传递的对象。

在你的情况下this == window当您直接调用该函数时(Confused()) 但如果你使用 new (new Confused())那么它将是您正在创建的新对象。

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

Javascript `this` 对象 == 成员函数中的 `window` 的相关文章

  • 在 Web 浏览器中查找触发 then 事件的 jQuery 代码

    我加入了一个团队来从事一个项目 现在他们使用 jQuery 并且很多 javascript 文件都是外部文件而不是嵌入的 当我点击一个按钮时 它看起来就像 a class button cancel Cancel a 它触发一个在一个 ja
  • 如何在 Chrome 中创建 TouchEvent?

    The W3C规范 http www w3 org TR 2011 WD touch events 20110505 idl def TouchEvent宣称initTouchEvent如下 void initTouchEvent in D
  • 计算Javascript中两次点击之间的时间

    我想用 javascript 计算属性的两次点击之间的时间 但我不知道如何 例如 a href click here a 如果用户单击多次 假设 5 秒内 我想显示警报 如果有帮助的话我正在使用 jQuery 我对 javascript 不
  • 使用模态表单 ajax 超出 HTMLFormElement.toString 的最大调用堆栈大小

    我想使用模态窗口中的 ajax 请求提交表单 单击此链接可打开该模式 a class btn btn primary i class fa fa edit i Write a review a 模态窗口 div class modal fa
  • Ember.JS - 如何在同一页面中使用多个模型、控制器和视图?

    我主要了解 Ember JS 的基础知识 大多数示例实际上只处理单个控制器和模型以在页面上显示某些内容 我真的很想用 Ember 构建一个完整的 Web 应用程序 所以有人能告诉我如何组织和连接多个控制器 模型和视图到一个页面中吗 例如 如
  • 如何使用 jQuery 向表中添加新行,并为其分配递增的 id

    我有一个现有的 HTML 表格 它是用户输入 GPS 点的表单的一部分 用户还可以选择上传 GPS 数据点 我想要一个用户可以按下的按钮 其中一些 Javascript 会向表中添加一个或多个新行 但新行必须继续增加表中使用的名称和 id
  • 如何改变HTML5视频的播放速度?

    如何更改 HTML5 中的视频播放速度 我查过视频标签的属性 https www w3schools com html html5 video asp在 w3school 但无法做到这一点 根据这个网站 http www chipwreck
  • 用数组反向查找对象

    假设我有一个这样的对象 resourceMap a 0 1 2 3 4 5 6 7 8 9 10 b 11 12 c 21 23 d 54 55 56 57 510 确定是否的最佳方法是什么resourceId 21将会 c 我们不知道钥匙
  • 如何从顺序键盘导航中删除 Vuetify 附加图标

    在带有 Vuetify 的 Vue js 应用程序中 我有一组用v text field并且其中有一个append icon为了切换文本可见性 如下所示
  • 如何将 Browserify 与外部依赖项一起使用?

    我正在尝试慢慢地将 Browserify 引入我的网站 但我不想重写所有 js 也不希望 jquery 和其他库的重复实例与我的 Browserify 版本捆绑在一起 如果我构建将 jquery 列为外部依赖项的模块 那么如何将其指向我的全
  • Keycloak javascript 适配器 `keycloak.init` 加载 404 iframe

    我正在尝试使用 javascript 适配器将 Keycloak 集成到我的客户端应用程序keycloak js 但是 我似乎无法让它发挥作用 这是我的代码 const keycloak new Keycloak realm my real
  • 如何在 e2e AngularJS 测试中进行文件上传?

    在我的一种观点中 我有一个文件上传控件 它支持通过拖放或单击按钮后打开的标准文件对话框上传文件 How to do this in my e2e tests1 1 Just one of the two options will be en
  • Jquery,清除/清空 tbody 元素的所有内容?

    我认为这会相当简单 但似乎空方法无法清除我拥有的 tbody 如果有人知道执行此操作的正确方法 我将不胜感激 我只想删除 tbody 中包含的所有内容 到目前为止我正在尝试 tbodyid empty HTML table tbody tr
  • 从多维无穷大数组中删除数组元素

    我想删除一个特定元素 例如 我想删除元素id 76在下面的数组中 而且 数组可以无限地组合在一起 这里的问题是我无法刷新页面 因为我使用 Vue js 进行即时操作 如果我能做到这一点 我的下一个问题可能是如何在我现在想要的地方添加一个元素
  • ES6 模板文字的延迟执行

    我正在玩新的ES6 模板文字 http tc39wiki calculist org es6 template strings 我首先想到的是String format对于 JavaScript 所以我开始实现一个原型 String pro
  • 替换两个引号之间的字符串

    我想转动一根绳子str hello my name is michael what s your s into hello my name is span class name michael span 我怎样才能在 JavaScript
  • React Native - 跨屏幕传递数据

    我遇到了一些麻烦react native应用程序 我不知道如何跨屏幕传递数据 我意识到还有其他类似的问题在 SO 上得到了回答 但是这些解决方案对我来说不起作用 我正在使用StackNavigator 这是我的设置App js file e
  • Restangular - _.contains() 不是一个函数

    如果您最近通过 Bower 更新了 Restangular 它将安装最新的 Lodash 新的 4 0 然而 这是一个问题 因为 Restangular Angular 现在会抛出错误 contains 不是函数 你怎么解决 解决方案非常简
  • 如何调试 Gulp 任务?

    如何调试我的中定义的 gulp 任务gulpfile js使用诸如 Google Chrome 调试器之类的调试器逐行单步执行任务的代码 对于 Node js 6 3 版本 您可以使用 inspect flag https nodejs o
  • 在 javascript 中使用 xPath 解析具有默认命名空间的 XML

    我需要创建一个 XML xPath 解析器 所有解析都必须在客户端进行 使用 JavaScript 我创建了一个 javascript 来执行此操作 在默认名称空间发挥作用之前 一切看起来都正常 我根本无法查询具有默认命名空间的 XML 我

随机推荐

  • 如何在 Cucumber-JVM 中明确匹配这些步骤?

    有什么方法可以明确匹配以下步骤吗 And I should have 2 alerts And I should have 2 alerts with param 71 我将它们实现为 And I should have d alerts
  • 使用 file.show 在 R studio 中打开 PDF

    我正在制作一个在 Swirl 中在 R 中运行的 R 教程 我正在尝试在 R 中打开特定的 PDF 文件 我在用 file show paste getwd cv pdf sep title some title 但显示是这样的 它不显示
  • Growl 通知:如何从网站推送 Growl 通知?

    我想知道如何将桌面 Growl 通知从我的 Web 应用程序推送给我的 Web 应用程序的用户 如果可能的话 我想使用 javascript 否则像 Ruby 或 PHP 这样的语言将是我的第二选择 您以前实施过类似的事情吗 如何做呢 我弄
  • 从列表中删除 nan - Python

    我试图从列表中删除 nan 但它拒绝删除 我尝试过 np nan 和 nan 这是我的代码 ztt for i in z if i nan ztt append i ztt or ztt for i in z if i np nan ztt
  • Feedparser 到数据框不输出所有列

    我从 feedparser 解析 URL 并尝试获取所有列 但我没有将所有列作为输出 不确定问题出在哪里 如果执行下面的命令 我没有获得几列的数据 但数据确实存在 您可以在浏览器中查看 my code import feedparser i
  • 左连接查询的 LINQ Fluent API 版本

    我目前有一个运行良好的 LINQ 查询 但我想知道如何将其转换为 LINQ Fluent API 格式 我尝试在 Google 上搜索有关 Fluent API 的不错的教程 尝试自己学习 但似乎没有 这是我要转换的查询 from s in
  • Jersey 2 多部分表单数据注入源

    我有一个方法 POST Consumes multipart form data Produces text xml public Response processForm FormDataParam myparam InputStream
  • RabbitMQ 失败,错误:无法连接到节点rabbit@TPAJ05421843:nodedown

    在 Windows 7 Enterprise 计算机上 我全新安装了 Erlang 17 4 和 RabbitMQ 3 4 3 x64 安装成功且顺利 我还没有尝试创建我的第一个队列或交换器 但我已经看到了麻烦 这个问题类似于另一个SO帖子
  • 不将数据保存到文档方向

    我尝试将数据保存到文档目录中 我没有收到任何错误 但它从不保存数据 它总是说 文件不存在 创建它 let fileManager FileManager default if let documentsDirectory fileManag
  • Control.BeginInvoke 是否有一个变体可以在句柄被销毁之前/之后工作?

    我有一个显示底层异步对象状态的控件 该对象引发事件 这些事件到达表单 在那里它们基本上排队并最终使用 BeginInvoke 进行调用 当控件被废弃时就会出现问题 因为事情是异步发生的 这意味着事件回调在处理过程中总是可能排队 所以我有时会
  • 找不到导入的项目“C:\Microsoft.CSharp.targets”

    我今天尝试打开 Visual Studio 2008 时遇到此错误project在 Visual Studio 2005 中 找不到导入的项目 C Microsoft CSharp targets 在记事本 或记事本 中打开您的csproj
  • 整数转换(缩小、扩大)、未定义的行为

    对我来说 以我可以轻松理解的方式找到有关该主题的信息非常困难 因此我要求对我所找到的内容进行审查 这都是关于转换和转换的 在示例中我将提到 signed unsigned int bigger signed unsigned char sm
  • 如何在 Java 中检测苹果芯片 (M1) 与英特尔芯片?

    对于每个不理解这个问题的人 请注意 os arch属性只会给你JRE的架构 而不是底层操作系统的架构 这不能回答我的问题 如果在 64 位系统上安装 32 位 jre System getProperty os arch 将返回 x86 为
  • 如何“取消转换”来自 South (Django) 的应用程序?

    我的内心发生了很大的变化models py 包括删除很多字段 并重命名几个类 schemamigration auto工作正常 但尝试migrate抛出一堆错误 我的所有代码目前都在开发中 所以我不介意丢失太多数据 所以我希望 South
  • 请求失败,HTTP 状态为 401:未经授权。 SSRS

    我在 MVC Web 项目中有一个处理 SSRS 的类 当我在 IIS 计算机中运行该应用程序时 我可以正常访问报告 当从网络上的另一台计算机运行时 出现 请求失败 HTTP 状态 401 未经授权 报表服务器有自己独特的凭证 不接受网络上
  • WinDbg:APPLICATION_HANG_WRONG_SYMBOLS

    我对 WinDbg 还很陌生 我正在尝试找到一个导致我的应用程序无缘无故挂起的错误 我不确定我做的事情是否正确 但我知道我需要系统 dll 以及我正在调试的 exe 的符号 因此 我这样设置符号路径 srv c websymbols htt
  • post方法的问题(使用fetch和express)

    我是一个非常初学者 所以我希望我的问题不是那么愚蠢 我想要做的是将经度和纬度从客户端 JavaScript 传递到服务器端的 Node js 中 我正在使用 fetch 和express js 下面是我的 html 代码 latitude
  • 如何为 PMD Xpath 规则设置嵌套条件

    我的规则要求我仅将它们应用于名称中不包含 get 的方法 换句话说 我的规则只需要应用于类中的非 getter 方法 我知道要掌握所有非 getter 方法 我可以使用 MethodDeclarator not contains Image
  • 步数计数器不会重置步数

    我可以使用以下命令开始和停止记录步骤Sensor TYPE STEP COUNTER通过注册和取消注册侦听器 但是 通过传递给我的应用程序的实际值SensorEvent当应用程序被销毁时 对象不会重置为零 如果我关闭应用程序并重新启动它 或
  • Javascript `this` 对象 == 成员函数中的 `window`

    在我的一些 Javascript 对象中 我发现我的this指针是正确的 这些是new Func type 对象 创建时 但在分配的方法中可能是错误的 function Confused console log checking this