javascript - 当嵌套函数用作属性时,Javascript this.key 不起作用
问题描述
我是一个初学者并且面临一个关于 javascript 对象这个方法的问题。我附上了代码以便更好地理解。在这段代码中,它不应该返回'user'对象的'firstName'属性值吗?但为什么它显示错误?
let user = {
firstName: "Ilya",
sayHi: function() {
function x() {
return console.log(this.firstName);
}
return x()
}
}
user.sayHi();
我知道如果我使用箭头函数而不是函数声明,那么它可以正常工作。此外,如果我使用单个函数作为属性键,那么它也可以工作,但我不明白为什么嵌套函数减速不起作用。你能帮我了解下原因吗?对不起我的英语不好,因为它是我的第二语言。提前致谢。
解决方案
当function () {}
被调用时没有任何引用,就像x()
它this
是window
对象一样。
在您的情况下firstName
是undefined
在窗口对象中,这就是您得到的原因undefined
这是排序的示例:
let user = {
firstName: "Ilya",
sayHi: function() {
function x() {
console.log(this==window); //because x is called without any reference it's this is window
return console.log(this.firstName);
}
return x()
}
}
window.firstName = "Zain"
user.sayHi();
推荐阅读
- python - 引发 GDB 错误:“未指定可执行文件”
- node.js - VS Code 集成终端抛出`Cannot find module` & `nvm is not compatible with the npm config "prefix" option`
- python - Numpy - 将二维数组与一维数组组合
- r - 是否有在 R 包中实现插件系统的官方方法?
- python - Python - 找到特定字符串时拆分文本文件的内容
- javascript - ElementNotInteractableException:使用 Selenium 和 Python 在 td 元素中设置值时出错
- javascript - 如何使用 Jquery 获得页面总高度的 1/3 并显示按钮?
- php - 使用 NGINX 和 laravel 进行动态子域路由
- laravel - 用户登录时 laravel 广播/auth 403(禁止)
- sql - 列出表中第三个值为空的表中的所有名称