为什么代码 this 指向 window 对象?

2023-12-08

我的代码是:

var length = 20;
function fn(){
    console.log(this.length);
}

var o = {
    length:10,
    e:function (fn){
       fn();
       arguments[0]();
    }
}

o.e(fn);

输出是20,1,谁能告诉我为什么?


当。。。的时候this关键字出现在函数内部,其值取决于函数是如何调用的.

就你而言,fn()被调用时没有提供 this 值,因此默认值为window. With arguments[0](),上下文是arguments对象,其长度为1.

重点是没关系函数被调用的地方,但这很重要函数是如何调用的.

var length = 20;
function fn(){
    console.log(this.length);
}

var o = {
    length:10,
    e:function (fn){
       fn(); // this will be the window.
       arguments[0](); // this will be arguments object.
    }
}

o.e(fn);

更进一步,如果你想要的话this成为对象o,你可以使用call or apply, or bind首先是一个对象。

var length = 20;
function fn(){
    console.log(this.length);
}

var o = {
    length:10,
    e:function (fn){
       var fn2 = fn.bind(this);
       fn.call(this); // this in fn will be the object o.
       fn.apply(this); // this in fn will be the object o.
       fn2(); // this also will be the object o.
    }
}

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

为什么代码 this 指向 window 对象? 的相关文章

  • 验证以防止角度形式出现重复的形式值

    我有几个表单数组 我需要进行验证 以便每个表单行中的特定字段在所有表单数组中必须是唯一的 如果任何值出现多次 则两个表单字段都必须标记为红色 我设法编写了一个函数 以便如果这些字段有任何更改 该函数将返回 true false 但我不确定如
  • Mat select - 获取selectionChange的旧值

    我有一个项目 其中有一个包含以下内容的表单mat select选择器 每当用户更改输入时 我都会向用户显示一个对话框来确认此操作 现在 The selectionChange 通知值何时更改并将新值传递为 event 当用户取消对话框时 有
  • Angular JS未知提供者错误

    删除 Bower components 并清理缓存后 我使用 Bower install 重新安装了依赖项 该应用程序无法加载并出现以下错误 未捕获的错误 injector unpr 未知提供程序 forceReflowProvider 这
  • 如何在 Angular 中实现全局加载器

    我有一个全局加载器 其实现如下 核心模块 router events pipe filter x gt x instanceof NavigationStart subscribe gt loaderService show router
  • Xml、xsl Javascript 排序

    我正在寻找一种使用 javascript 对 xml 数据进行排序的方法 并希望最终过滤掉数据 我知道这一切都可以在 xsl 文件中实现 但我想在客户端进行 我已经搜索了多个使用 javascript 进行排序的地方 但其中大部分要么太特定
  • innerText 和 html 之间的区别

    有什么区别innerText text and html innerText or text http docs jquery com Attributes text如果您使用的是 jQuery 不包含任何 HTML 标签 因此 如果您有一
  • 使用 JSONP 时出现“无效标签”?

    我的 JSONP 请求有问题 数据不会显示 Firebug 显示 无效标签 错误 我的 JavaScript ajax url link dataType jsonp beforeSend function xhr var base64 b
  • 如何根据本地存储中的另一个数据响应推迟 XMLHttpRequest [重复]

    这个问题在这里已经有答案了 function to download pps compress txt from cloud server for global parameter set PPs function get pps para
  • Vue: vue-i18n: 无法翻译 keypath 的值,使用 keypath 的值作为默认值

    我正在使用 Vue 我想展示三种语言 英语 他加禄语和宿务语 现在我有错误 无法转换键路径 NavbarMobile home 的值 使用 keypath 的值作为默认值 我通过 console log this i18n locale 检
  • 为什么使用 MarkForCheck() 和 setTimeout?

    我对 ChangeDetectorRef 中的 MarkForCheck 方法有疑问 对于一种用法我必须使用this cd markForCheck 因为在控制台中我获取了值 但它没有在视图上更新 setTimeout gt this ch
  • 谷歌colab录音,如何实现更精确的方式告诉用户开始对着麦克风说话

    我正在尝试创建一个为机器学习项目录制音频的程序 我想使用 google colab 这样人们就不必在他们的系统上安装或运行任何东西 我在网上找到了这个录制和播放音频的示例 单元格 1 包含用于录制音频的 js 代码和用于将其转换为字节对象的
  • 防止 Firefox Web 通知自动关闭

    我已经在 Firefox 中将 Web 通知与服务器发送的 DOM 事件结合使用 不幸的是 通知在大约两到三秒后消失 我更喜欢 Chrome 的方法 即让消息保持可见 在任何给定时间最多显示三个 直到用户单击通知 这是我所拥有的 windo
  • 当我尝试使用 jasmine 进行测试时,应用程序文件夹未在 Ext.appliation 中加载

    我正在尝试在我的应用程序 Ext js 5 中实现茉莉花以进行单元测试 为此 我创建了应用程序测试文件 Ext require Ext app Application Ext Loader setConfig enabled true Ex
  • onDeviceReady 未在 PhoneGap hello world 应用程序中触发

    我正在尝试做一个简单的警报 测试 应用程序 但事件没有被触发 这是代码 function onLoad document addEventListener deviceready onDeviceReady false Cordova is
  • 如何在vuetify中设置固定工具栏?

    在 vuetify 中我使用工具栏
  • 如何用 GreaseMonkey 替换 onclick 事件?

    该网站有一个图片库 每次我单击缩略图时 它都会在新选项卡中打开 URL 不是因为我将 Firefox 设置为在新选项卡中打开链接 我只想在同一窗口中打开 URL 缩略图的示例如下 span class thumb a href post i
  • Web 文本编辑器中的 RTF 格式

    网络上是否有支持 RTF 格式文档输入的文本编辑器 我知道这对 webdev 来说有点奇怪 但我需要从数据库中读取 RTF 文档 并在基于 Web 的文本编辑器中对其进行编辑 然后将其存储回 RTF 中 在我在转换工具上投入太多资金之前 我
  • 如何阻止用户重复单击 jQuery AJAX 调用?

    我有一个包含以下脚本的网页 JavaScript function LinkClicked var stage this id var stop ContentPlaceHolderMenu txtDate val var nDays Co
  • iOS 上 Safari 中的 shift 键

    有没有办法在javascript中判断手机键盘上是否按下了shift键 并将其与大写锁定 按两次shift键 区分开来 一些事实 首先 让我们看一下有关 iOS 键盘的一些事实 我假设您已经知道了 当您进入键盘模式时 shift键始终处于激
  • 在 Chrome 扩展中使用页面的 Angular JS

    我有一个 HTML 页面 其中有一些使用 Angular 配置的 DOM 现在我正在构建一个 chrome 扩展来修改文本框中的值 element value newValue不起作用 因为文本框是用 Angular 设计的 在阅读了一些资

随机推荐

  • 选择性 nvidia #pragma optionNV(全部展开)

    我正在使用 nvidia 的展开循环指令 但还没有找到有选择地打开它的方法 可以说我有这个 void testUnroll pragma optionNV unroll all for void testNoUnroll for 在这里 我
  • 结构体可以包含引用类型的字段吗

    结构体可以包含引用类型的字段吗 如果可以的话这是一种不好的做法吗 是的他们可以 这是不是一个好主意 嗯 这取决于具体情况 就我个人而言 我很少首先创建自己的结构 我会以一定程度的怀疑态度对待任何新的用户定义的结构 我并不是说这是always
  • 单击 NotifyIcon 时切换表单可见性,单击其他位置时隐藏它

    我有一个位于系统托盘中的应用程序 我想让它在用户单击时可见notifyIcon 如果它还不可见 如果它已经可见 则应将其隐藏 此外 当用户单击表单之外的其他任何位置时 表单应该隐藏 如果它可见 我的代码如下所示 protected over
  • Android AdapterView 点击监听器参数 - 位置和 id

    我在列表视图上设置一个长单击侦听器 我想使用单击项目的索引来检索相应的对象 方法签名和参数定义根据安卓文档 public abstract boolean onItemLongClick AdapterView
  • TcpListener 与 SocketAsyncEventArgs

    是否有正当理由不使用TcpListener用于实现高性能 高吞吐量TCP服务器而不是SocketAsyncEventArgs 我已经使用以下方法实现了这个高性能 高吞吐量 TCP 服务器SocketAsyncEventArgs使用大的预分配
  • WebBrowser - 空文档文本

    我正在尝试使用WebBrowser类 但当然这是行不通的 My code WebBrowser browser new WebBrowser browser Navigate http www google com while browse
  • 黑莓 - 更改设备上的纬度和经度以测试应用程序

    我想在设备上测试我的应用程序 是否可以在设备设置中的某个位置对纬度和经度值进行硬编码 以便应用程序读取这些值而不是当前位置 我想在当前位置以外的不同位置测试我的应用程序 在 BB 模拟器中 您可以转到 模拟 gt GPS 位置 单击 添加
  • 在 Google 地图中显示我当前的位置

    最后我成功显示了地图 现在 我想显示我当前的位置 我尝试使用这些代码 但当我单击右上角的我的位置按钮时它不起作用 AndroidManifest xml
  • 如何检测正在编辑的单元格是否属于定义的名称范围的最后一行

    我有一个定义的名称 称为 Input Range 如果正在编辑输入范围的最后一个空行 向空行添加值 则自动插入一个空行 我已经研究这个问题几天了 但没有解决方案 我只能做 Worksheet change 事件检测定义的名称范围内的数据是否
  • 如何抓取 Tableau 仪表板,其中单击地图后数据仅显示在图中?

    我正在尝试从中抓取数据这个公共 Tableau 仪表板 兴趣在于时间序列绘制的数据 如果我单击地图中的特定状态 时间序列将更改为该特定状态 下列的this and this我得到了在国家一级汇总的时间序列的结果 使用下面提供的代码 但我感兴
  • 我可以在打字稿中声明静态私有函数吗?

    我有以下代码 module Dialog export class Modal static createAccessModal link Link createModal link static createAdminModal link
  • 将 android:layoutAnimation 添加到 LinearLayout 会导致 FC

    我在 menu xml 中有以下 XML 它是一个我需要设置动画的 LinearLayout 因此我使用layoutAnimation 属性 如果没有这个属性 布局会完美地显示 但是设置了这个属性后 我会得到一个令人讨厌的强制关闭 我不明白
  • 您的 BDD 规范是否应该与 UI 测试分开?

    昨天我参加了一场精彩的演讲戈伊科 阿季奇关于 BDD 我可能错过了他说的一两件事 所以这里有一个问题希望能为我澄清一些事情 通常 当您在网上看到 BDD 示例时 它们会在 UI 中包含步骤 在小黄瓜语言中 您经常可以看到类似以下内容 Sce
  • Android Web 视图中的所见即所得

    我一直在尝试从我的应用程序内部向我的用户提供所见即所得的 HTML 编辑器 它不必是花哨的所见即所得 我只需要基本功能 如粗体 斜体 下划线 图像 链接和一些基本格式 字体大小 颜色 对齐方式 那应该足够了 完美的解决方案是一个开源库 但我
  • Angular 4:API调用后更新模板变量[重复]

    这个问题在这里已经有答案了 我有一个组件指令 用于显示带有一些信息的 div 该组件称为站点组件并包含在页面中 该人的主要行为站点组件很好 除了这个 我有一个对后端的 API 调用 我在其中返回一些数据 后端调用执行良好 我收到了信息 但变
  • 在内联汇编中使用双精度数字(GCC、IA-32)

    我刚刚开始在计算机科学课上学习汇编 并且我有一项作业是使用指定的舍入模式对浮点值进行舍入 我尝试使用它来实现fstcw fldcw and frndint 我修改舍入控制位 对数字进行舍入 然后恢复以前的控制位 分配的要求 目前突出的问题是
  • 为什么协程停止工作/执行

    我有一个 3 秒倒计时器 当游戏取消暂停时会激活该计时器 几天前我还可以正常工作 但现在它不再工作了 它在号码 3 上被阻止 这是代码 IEnumerator Timer Time timeScale 0 objectWithGSScrip
  • 如何有效地使用绑定框架

    我已经使用绑定框架有一段时间了 我想知道您如何处理这种情况 你有一份报纸 它有一些属性 比如 字符串 标题 布尔值 已发布 日期 出版日期 在您看来 您有一份报纸列表 可以同时编辑所有报纸 这意味着您可以在单个请求中更改所有报纸的标题或所有
  • 实体框架在哪里存储属性名称与其在 SQL 中选择的列之间的映射?

    我正在尝试使用 ObjectQuery 的 ToTraceString 在 EF 4 3 上构建一些自定义扩展 以从 LINQ 代码生成原始 SQL 我注意到 虽然在某些情况下 SQL 中的列名称与查询元素类型的属性名称相匹配 但在其他情况
  • 为什么代码 this 指向 window 对象?

    我的代码是 var length 20 function fn console log this length var o length 10 e function fn fn arguments 0 o e fn 输出是20 1 谁能告诉