函数分配后未定义的Javascript

标签 javascript this

因此,我在阅读《面向 Web 开发人员的专业 Javascript》一书时遇到了以下示例。

var object = {
  name: "my Object",
  getName: function() {
    return this.name;
  }
}

然后作者展示了以下结果:

object.getName(); // "my Object"
(object.getName)(); // "my Object"
(object.getName = object.getName)() // "undefined"

我理解第一种情况,但对情况 2 和情况 3 有以下问题。

案例 2:在 object.getName 两边加上括号有什么作用?到目前为止我只知道你可以在匿名函数周围加上括号来立即调用它(立即调用函数表达式)。但是如果函数不是匿名的呢?

案例3:为什么赋值后this不维护了?

最佳答案

这里的问题真的与this changing 没有任何关系。第三种情况的不同之处在于,用作函数引用的值已经失去了与上下文对象的关系。

当通过评估对象属性引用获得函数引用,然后调用该函数时,JavaScript 确保将函数中的 this 设置为所涉及的对象。这就是前两种情况的工作原理。

第三种情况,函数引用本来是从对象中获取的,但是整体的值

(object.getName = object.getName)

= 赋值的值。因此,与对象的关系被打破,你所得到的只是一个函数的引用。因此调用不会设置 this。就好像你写了:

var something = object.getName;
something();

这也不会将 this 设置为 object。只有当函数引用直接来自 .[ ] 操作时,所涉及的对象才会在调用中以 this 结束。情况 2 中的括号是一种特殊情况;在 JavaScript 中,括号不计算任何值;它们会影响表达式的解析方式,但不会主动执行任何操作。

关于函数分配后未定义的Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32424327/

相关文章:

javascript - 检查单元格中的文本是否为粗体

jquery - 如何使用 Asp.net 在 JQuery/Javascript 中实现带有 If 条件的确认对话框

javascript - 如何使某个 javascript 函数在页面加载时执行其所有元素?

javascript - 无法在此代码中获取 this.value

javascript - 为什么这两个事件处理程序中的上下文不同

javascript - 在 Socket.io 函数中使用 this 关键字

javascript - jQuery 更改 Div 按钮状态并单击禁用

javascript - 根据背景颜色更改颜色

java - 带有两个编辑的 AlertDialog - 当按下按钮确定时 --> 启动新的 Alert

javascript - 提取链接 ID 以在 jquery 函数中使用