当我们将方法存储在变量中然后调用它时,为什么上下文对象更改为全局窗口对象?

技术员

以下示例摘自jqfundamentals,

var person = {
  firstName : 'Boaz',
  lastName : 'Sender',
  greet : function() {
    log( 'Hi, ' + this.firstName );
  }
};

var sayIt = person.greet; // store the method in a variable

sayIt(); // logs 'Hi, undefined' -- uh-oh

作为解释,

当我们将.greet()方法存储在变量sayIt中,然后调用sayIt()时,上下文对象将更改为全局窗口对象,而不是person对象。由于窗口对象没有属性firstName,因此当我们尝试访问它时,我们将获得不确定的信息。

我的问题是

当我们将.greet()方法存储在变量sayIt中,然后调用sayIt()时,为什么上下文对象更改为全局窗口对象?

xdazz

这是规格,请参阅ecma-262 / 5.1 /#sec-10.4.3

当控制进入功能对象F中包含的功能代码的执行上下文,调用者提供thisArg和调用者提供argumentsList时,执行以下步骤:

  1. 如果功能代码是严格代码,则将ThisBinding设置为thisArg
  2. 否则,如果thisArgnull未定义,则将ThisBinding设置为全局对象

.......

因此,在严格模式下this将引用undefined,否则将引用全局对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我们可以将浏览器的JavaScript的执行上下文从Window对象更改为其他对象吗?

来自分类Dev

将单词上下文对象存储在变量中

来自分类Dev

当我单击子窗口时,为什么会得到WM_MOUSEACTIVATE?我将焦点更改为父对象,这会导致子对象杀死焦点逻辑

来自分类Dev

为什么保存受管对象上下文更改为isDeleted值?

来自分类Dev

我们可以在不显示在层次结构窗口的上下文菜单中的游戏对象菜单中添加菜单项吗?

来自分类Dev

有什么方法可以在v8上下文的全局对象中拦截函数定义?

来自分类Dev

为什么当我们调用“任务”变量时,必须将其写为“ task()”

来自分类Java

为什么当我们调用静态最终变量时不首先执行静态块

来自分类Dev

我们是否应该始终将对象设置回Install4j中的上下文?

来自分类Dev

顺序函数调用的执行上下文-更改为窗口

来自分类Dev

为什么在定义了一些从对象到变量上下文的方法后丢失了?

来自分类Dev

当我们不使用方法隐藏时,为什么不调用父方法?

来自分类Dev

当存储类型未存储在数据库中时,当我们更改FileField的存储属性时,为什么django创建迁移文件?

来自分类Dev

不在对象上下文中时使用$ this在静态方法中调用简单方法

来自分类Dev

为什么当我们只给一个变量赋一个变量并打印时打印所有对象的属性

来自分类Dev

为什么当我们将c中的每个边的成本更改为c'= log17(c)时,G中的每个MST仍然是G'中的MST(反之亦然)?

来自分类Dev

当我们传递魔术模拟对象时,Python中的List方法返回空列表

来自分类Dev

当我们为一个类的对象分配一个整数值时,为什么要调用参数化构造函数?

来自分类Dev

角服务“ this”正在更改窗口对象的上下文

来自分类Dev

如何在给定的上下文(本地和全局)中执行可调用对象?

来自分类Dev

当我们使2个对象的哈希码指向一个地址时,为什么它是临时的?

来自分类Dev

当我尝试在片段中调用上下文时崩溃

来自分类Dev

JavaScript中的“调用上下文”和“执行上下文”:我们在谈论同一件事吗?

来自分类Dev

当我们已经具有MVC提供的默认功能时,为什么我们需要Ajax / jQuery调用colntroller方法?

来自分类Dev

当我们可以存储在字符串变量中时,缓冲区的目的是什么?

来自分类Dev

当我们尝试将变量除以零时,为什么编译器没有显示错误

来自分类Dev

为什么我们在Android的短信管理器中使用应用程序上下文

来自分类Dev

调用ES6方法时的绑定上下文。如何从称为回调的方法中访问对象?

来自分类Dev

在Reducer.reduce方法中写入上下文时,为什么要调用toString方法而不是write方法?

Related 相关文章

  1. 1

    我们可以将浏览器的JavaScript的执行上下文从Window对象更改为其他对象吗?

  2. 2

    将单词上下文对象存储在变量中

  3. 3

    当我单击子窗口时,为什么会得到WM_MOUSEACTIVATE?我将焦点更改为父对象,这会导致子对象杀死焦点逻辑

  4. 4

    为什么保存受管对象上下文更改为isDeleted值?

  5. 5

    我们可以在不显示在层次结构窗口的上下文菜单中的游戏对象菜单中添加菜单项吗?

  6. 6

    有什么方法可以在v8上下文的全局对象中拦截函数定义?

  7. 7

    为什么当我们调用“任务”变量时,必须将其写为“ task()”

  8. 8

    为什么当我们调用静态最终变量时不首先执行静态块

  9. 9

    我们是否应该始终将对象设置回Install4j中的上下文?

  10. 10

    顺序函数调用的执行上下文-更改为窗口

  11. 11

    为什么在定义了一些从对象到变量上下文的方法后丢失了?

  12. 12

    当我们不使用方法隐藏时,为什么不调用父方法?

  13. 13

    当存储类型未存储在数据库中时,当我们更改FileField的存储属性时,为什么django创建迁移文件?

  14. 14

    不在对象上下文中时使用$ this在静态方法中调用简单方法

  15. 15

    为什么当我们只给一个变量赋一个变量并打印时打印所有对象的属性

  16. 16

    为什么当我们将c中的每个边的成本更改为c'= log17(c)时,G中的每个MST仍然是G'中的MST(反之亦然)?

  17. 17

    当我们传递魔术模拟对象时,Python中的List方法返回空列表

  18. 18

    当我们为一个类的对象分配一个整数值时,为什么要调用参数化构造函数?

  19. 19

    角服务“ this”正在更改窗口对象的上下文

  20. 20

    如何在给定的上下文(本地和全局)中执行可调用对象?

  21. 21

    当我们使2个对象的哈希码指向一个地址时,为什么它是临时的?

  22. 22

    当我尝试在片段中调用上下文时崩溃

  23. 23

    JavaScript中的“调用上下文”和“执行上下文”:我们在谈论同一件事吗?

  24. 24

    当我们已经具有MVC提供的默认功能时,为什么我们需要Ajax / jQuery调用colntroller方法?

  25. 25

    当我们可以存储在字符串变量中时,缓冲区的目的是什么?

  26. 26

    当我们尝试将变量除以零时,为什么编译器没有显示错误

  27. 27

    为什么我们在Android的短信管理器中使用应用程序上下文

  28. 28

    调用ES6方法时的绑定上下文。如何从称为回调的方法中访问对象?

  29. 29

    在Reducer.reduce方法中写入上下文时,为什么要调用toString方法而不是write方法?

热门标签

归档