Object方法中的“this”关键字指向Window

2024-01-04

var name = 'The Window';
var object = {  
  name: 'My Object',
  getNameFunc: function(){    
    return function() {     
      return this.name;   
    }; 
  }
};

console.log( object.getNameFunc()() );

当我测试代码时。结果就是《窗户》。但我觉得this.name;应该My Object。我的想法怎么了。

当我在之前添加 var 时name : "My Object",它显示一个错误。?为什么?


this函数内部是调用它的“接收者”。

That is,

  1. 对于构造x.f(), this在函数内部(f)将评估为x.

  2. 对于所有其他情况,this将评估为window在被调用的函数内部。(功能call, apply, and bind也可以改变this...但那是另一个故事了。)

在发布的示例中,第二个函数(带有this.name) is not使用调用x.f()形式等this is the window object.

“简单的修复”是使用闭包:(第一个函数is中调用了x.f()形式并因此this是相同的object,这符合预期。我们捕捉的价值this在当前范围内通过创建的闭包self以及返回的函数。)

getNameFunc : function () {
    var self = this
    return function () {
        return self.name
    }
}

不过,我可能会考虑另一种设计,具体取决于:)

快乐编码。


补充说明,供评论:

...那是因为你正在使用circle.getArea()其形式为x.f(). Thus thisgetArea 函数内部的计算结果为circle.

在发布的代码中您正在调用两个不同的功能连续。想象一下这样编写代码:

var nameFunc = object.getNameFunc()
nameFunc()

第一个函数调用的形式为x.f()因此thisgetNameFunc 内部是对object。然而,在第二行中,函数 (nameFunc) 是not以形式调用x.f()。因此,thisnameFunc 内部(从 getNameFunc 返回的函数)将计算为window,如上所述。

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

Object方法中的“this”关键字指向Window 的相关文章

  • 将鼠标悬停时的鼠标光标更改为锚状样式

    如果我将鼠标悬停在div鼠标光标将更改为 HTML 锚点中的光标 我怎样才能做到这一点 假设你的div has an id myDiv 将以下内容添加到您的 CSS 中 这cursor pointer指定光标应与用于锚点 超链接 的手形图标
  • 如何使用 JavaScript 创建链接?

    我有一个标题字符串和一个链接字符串 我不知道如何将两者放在一起以使用 JavaScript 在页面上创建链接 任何帮助表示赞赏 我试图解决这个问题的原因是因为我有一个 RSS 源并且有一个标题和 URL 列表 我想将标题链接到 URL 以使
  • Javascript 函数查找数字的倍数

    创建一个名为的函数multiplesOf 它将接受两个参数 第一个参数是数字数组 第二个参数是数字 该函数应返回一个新数组 该数组由参数数组中的每个数字组成 该数字是参数数字的倍数 So multiplesOf 5 6 7 8 9 10 3
  • Chart.js 在初始化时设置活动段

    我正在使用 Chart js v2 并且尝试在加载图表时模拟圆环图上某个段的 悬停状态 因此看起来有一个部分已突出显示 我已经搜索和梳理了代码一天 但找不到一个好的方法来做到这一点 提前致谢 设置片段的悬停样式有点令人困惑 因为它没有真正记
  • 在 contenteditable div 中选择范围

    我有一个contenteditablediv 和其中的一些段落 这是我的代码 div style border solid 1px black width 300px height 300px div Hello world div div
  • 是否存在 IsCallable 为 false 但 IsConstructor 为 true 的 JS 对象?

    ECMAScript 规范函数可调用 https www ecma international org ecma 262 6 0 index html sec iscallable当且仅当其参数具有 Call 内部方法时返回 true 它在
  • 如何修改每个JSON对象javascript

    我想修改里面的每个 JSON 值cooldown object cooldown user 1 This user2 0 This 在 Javascript 中使用 for 语句 我研究了好几个小时 只找到了内部的 blocks Edit
  • 使用 JavaScript 禁用第三方 cookie

    我正在努力根据所有在欧盟运营的公司的数据保护规则实施新的 Cookie 政策合规性 根据该规则 用户在使用任何网站时必须能够拒绝 接受除必需的 Cookie 之外的所有内容 在我客户的网站中 我可以看到正在存储以下第三方 cookie ga
  • 如何更改 Google Maps v3 API for Directions 中的开始和结束标记图像

    我使用 DirectionsRender 绘制了一条路线 但我不知道如何用我自己的标记替换通用的 Google 标记 我知道并在正常的谷歌地图情况下使用它 但发现很难用开始和结束的方向标记来做到这一点 如果这是一个愚蠢的问题 感谢您的任何建
  • 如何将内联 JavaScript 与 Express/Node.js 中动态生成的内容分开?

    对于具有几年 Web 开发经验但没有找到答案的人来说 这是一个有点菜鸟的问题程序员堆栈交换 or Google 我决定在这里问一下 我在用Express网络框架Node js 但这个问题并不特定于任何 Web 框架或编程语言 以下是从数据库
  • Snap.svg - 停止在可悬停元素的子元素上重新触发悬停事件

    对于一个项目 我使用的 SVG 形状由背景多边形和背景多边形上方的一些文本 我已将其转换为路径 组成 我正在使用 Snap svg 为我的形状设置动画 当我将鼠标悬停在多边形上时 形状应该缩放到特定尺寸 包括其中的所有内容 鼠标移开时 形状
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • 防止 iOS 键盘在 cordova 3.5 中滚动页面

    我正在使用 Cordova 3 5 和 jQuery mobile 构建 iOS 应用程序 我在大部分应用程序中禁用了滚动功能 但是 当我选择输入字段时 iOS 键盘会打开并向上滚动页面 我不想要这个功能 由于输入足够高 键盘不会覆盖它 我
  • 如何制作没有 ng-repeat 的模板并使用 Angular-drag-and-drop-lists 将数据传递到 $scope?

    我想用角度拖放列表 https github com marceljuenemann angular drag and drop lists使用我自己的网格模板到所见即所得编辑器 如何构建我自己的 HTML 模板而不需要ng repeat因
  • Javascript split 不是一个函数

    嘿朋友们 我正在使用 javascript sdk 通过 jQuery facebook 多朋友选择器在用户朋友墙上发布信息 但是我收到此错误friendId split 不是函数 这是我的代码 function recommendToFr
  • 刷新页面时保存用户的选择

    我目前有一个页面显示不同团队的数据 我有一些数据 用户可以单击使其处于 打开 或 关闭 状态 并为每个数据显示不同的图标 它基本上就像一个清单 只是没有物理复选框 我想记住哪些 复选框 已被选中 即使在用户刷新页面或关闭浏览器并稍后返回之后
  • Javascript 假值(null、未定义、false、空字符串:“”或 '' 和 0)和比较(==)运算符 [重复]

    这个问题在这里已经有答案了 当我使用任何一个值时 null undefined false 0 in a if陈述 它总是被评估为谬误 false 另外 这些值的否定 null undefined false 0 in a if语句总是被评
  • Three.js 各种大小的粒子

    我是 Three js 的新手 正在尝试找出添加 1000 个粒子的最佳方法 每个粒子都有不同的大小和颜色 每个粒子的纹理是通过绘制画布创建的 通过使用粒子系统 所有粒子都具有相同的颜色和大小 为每个粒子创建一个粒子系统是非常低效的 有没有
  • 如何隐藏/禁用 Highcharts.js 中的图例框?

    我想问是否可以使用 HighCharts js 库隐藏图表中的所有图例框 var chart object chart renderTo render to type graph type colors graph colors title
  • Javascript Replace() 和 $1 问题

    我正在尝试创建一个脚本来搜索文本中的模式并在它找到的字符串周围包裹一个标签 shop attributes td each function this html function i html return html replace E 0

随机推荐

  • 读取科学计数法 scanf

    我正在开发一个程序 它应该只有一个 scanf 函数 并且应该能够接受科学计数法和实数的输入 任何帮助将不胜感激 根据scanf文档 http en cppreference com w c io fscanf f匹配浮点数 数字的格式与预
  • 通过初始化列表实例化抽象类[重复]

    这个问题在这里已经有答案了 我想了解为什么编译器允许编译以下代码 include
  • Numpy 和 matplotlib 垃圾收集

    我有一个 python 脚本 它对不同的参数进行许多模拟 Q K 绘制结果并将其存储到磁盘 每组参数 Q K 生成 200x200x80 数据点的 3D 体积网格 这需要约 100 MB 的数据 然后逐层绘制该体积网格的一部分 生成约 60
  • 将参数绑定到信号/槽

    我基本上有多个事件信号 我想将它们连接到同一个插槽 我想知道的是如何将基于字符串的参数传递到同一插槽 以便该插槽知道该信号来自哪个信号 一种替代方法是制作与信号一样多的槽 然后以 1 1 的方式连接它们 但考虑到所有处理的代码非常相似 这种
  • 在 R 中生成滞后时间序列横截面变量

    我是 R 新用户 我有一个时间序列横截面数据集 尽管我已经找到了滞后时间序列数据的方法R 我还没有找到创建滞后时间序列横截面变量的方法 以便我可以在分析中使用它们 以下是您可以如何使用lag 功能与zoo 和面板系列数据 gt librar
  • 远程主机标识已更改?

    NPM 表示可能存在安全错误 meteor npm install mui system npm ERR Error while executing npm ERR usr local bin git ls remote h t ssh e
  • 开始创建自定义视图过渡

    我正在寻找有关创建自定义视图转换的教程 特别是 涉及除受影响的 UIView 之外的元素的转换 例如在转换发生时播放动画或修改正在转换的 UIView 的屏幕截图 我并不是指实现一组基本的过渡 幻灯片 淡入淡出等 苹果网站上有很多相关示例
  • 如何以相同的方式对两个数组进行排序?

    我希望输出为 3 0 2 36 1 1 键和以相同方式排序的值 three one two fun main var l 0 var letters arrayOf one two three var digits arrayOf 2 36
  • hadoop 空指针异常

    我正在尝试设置一个hadoop的多节点集群迈克尔 诺尔的方式 http www michael noll com tutorials running hadoop on ubuntu linux multi node cluster 使用两
  • Dockerfile 中 RUN 和 CMD 的区别

    我很困惑什么时候应该使用CMD vs RUN 例如 执行 bash shell 命令 即ls la 我总是会使用CMD或者有什么情况我会使用RUN 试图了解这两个类似的最佳实践Dockerfile指令 RUN https docs dock
  • 在 IIS 6 中的应用程序级别设置 NTAuthenticationProviders

    我在 IIS 中有以下结构 Internet Information Services local computer Web Sites Default Web Site MyApplication MyApplication是 IIS 中
  • 无法在脚本模块中创建 PowerShell 别名

    重现步骤 使用以下函数和别名在 WindowsPowerShell Modules TestAlias TestAlias psm1 中创建 TestAlias 模块 function foo write output foo New Al
  • 将 defaultdict(list) 写入文件

    之前问过一个问题使用defaultdict解析多分隔符文件 https stackoverflow com questions 46264408 using defaultdict to parse multi delimiter file
  • 在 Glassfish 中导入 ssl 证书

    我有以下问题 我从 comodo 为我的 glassfish Web 应用程序获得了免费证书 90 天 然后我通过以下方式将证书导入 glassfish 3 1http javadude wordpress com 2010 04 06 g
  • 如何在不使用 UITableViewDiffableDataSource 删除和插入的情况下重新加载项目?

    我正在使用我的应用程序中实现搜索屏幕UITableViewDiffableDataSource 每个单元格代表一个搜索命中 并在单元格标题中突出显示搜索匹配 有点像 Xcode 的 快速打开 窗口突出显示其结果项的部分内容 当在搜索字段中输
  • 字符串文字中 Informix JDBC、MONEY 和小数点分隔符的问题

    我在使用 MONEY 数据类型的 JDBC 应用程序时遇到问题 当我插入 MONEY 列时 insert into money test amt values 123 45 我得到了例外 Character to numeric conve
  • 为什么不可能窃取访问令牌?

    我正在学习 OAuth 我脑子里有一个问题 我找不到答案 我理解请求令牌是否授权应用程序使用 API 但是 一旦用户获得了访问令牌 如果有人窃取了他的访问令牌 会发生什么情况 想象一下我们有类似的东西http www example com
  • 如何在不运行测试的情况下获取所有标签和黄瓜场景

    我想以某种方式获取我在项目中使用的所有标签的列表 并获取我在项目中没有运行测试的黄瓜场景的所有名称 有人可以帮助我我该怎么做吗 根据 mpkorstanje的建议 您可以为此创建一个自定义插件 public class DryRunPlug
  • 如何测试MySQL事务?

    我有一个关于测试事务中的查询的问题 我使用 MySQL 事务已经有一段时间了 每次我这样做时 我都会使用类似的东西 doCommit true error mysql query BEGIN repeat this part with th
  • Object方法中的“this”关键字指向Window

    var name The Window var object name My Object getNameFunc function return function return this name console log object g