首页 > 解决方案 > 当嵌套函数用作属性时,Javascript this.key 不起作用

问题描述

我是一个初学者并且面临一个关于 javascript 对象这个方法的问题。我附上了代码以便更好地理解。在这段代码中,它不应该返回'user'对象的'firstName'属性值吗?但为什么它显示错误?

let user = {
    firstName: "Ilya",
    sayHi: function() {
        function x() {
            return console.log(this.firstName);
        }
        return x()
    }
}

user.sayHi();

我知道如果我使用箭头函数而不是函数声明,那么它可以正常工作。此外,如果我使用单个函数作为属性键,那么它也可以工作,但我不明白为什么嵌套函数减速不起作用。你能帮我了解下原因吗?对不起我的英语不好,因为它是我的第二语言。提前致谢。

标签: javascriptobject

解决方案


function () {}被调用时没有任何引用,就像x()thiswindow对象一样。

在您的情况下firstNameundefined在窗口对象中,这就是您得到的原因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();


推荐阅读