【问题标题】:JavaScript Object Question: get the property value of an object using the object name [duplicate]JavaScript对象问题:使用对象名称获取对象的属性值[重复]
【发布时间】:2021-08-27 08:27:13
【问题描述】:

我想问一个关于对象的 javascript 属性的问题。 在下面的代码中,我有一个 javascript 对象。我想在函数“testFunction”中使用属性“testName”。我发现“this.testName”在 javascript 对象中不起作用,但如果我执行“TestObject.testName”之类的操作,它可以正常工作。所以一般来说,在对象的函数中获取像“TestObject.testName”这样的属性值是错误的吗?

const TestObject= {
    testName:"testValue",
    testFunction: ()=>{
        var result = TestObject.testName+ "result"; 
        return result ;
    }
} ```

【问题讨论】:

  • “我发现“this.testName”在 javascript 中不起作用” - 它起作用但在您的代码中它不是因为箭头函数。任何应该作为 method 调用的函数都应该使用常规函数声明:testFunction: function() { ... } 或使用速记方法语法; testFunction() { ... }
  • 查看关于为什么this 不起作用的骗局,回答所问的问题,是的,这是错误的(大多数情况下)。概括地说,最好使用类而不是“具有功能的对象”。

标签: javascript object properties


【解决方案1】:

所以一般来说,在对象的函数中获取“TestObject.testName”等属性的值是错误的吗?

不适用于像这样的单例对象,不,这完全没问题(您使用了const,因此没有人可以将TestObject 重新分配为其他对象)。也就是说,它不起作用的原因是您使用了箭头函数,而不是传统的函数或方法。如果您使用传统函数或方法,this 可以正常工作(但请继续阅读):

// Traditional function
const TestObject1 = {
    testName:"testValue",
    testFunction: function() {
        var result = this.testName+ "result"; 
        return result ;
    }
};

console.log(TestObject1.testFunction());

// Method
const TestObject2 = {
    testName:"testValue",
    testFunction() {
        var result = this.testName+ "result"; 
        return result ;
    }
};

console.log(TestObject2.testFunction());

我说“它可以正常工作”,但只有在调用 testFunctionthis 设置为 TestObject 时才会这样。可能会调用testFunction,这样this 将无法正确设置,有关这些情况以及如何处理它们的详细信息,请参阅How to access the correct this inside a callback? 的答案。

【讨论】:

    【解决方案2】:

    使用this.testName 而不是TestObject.testName

    您可以在此处阅读有关this 的更多信息: https://www.w3schools.com/js/js_this.asp

    @编辑

    抱歉,我没有注意到您使用了箭头功能。尝试改用常规函数。箭头函数正在改变 this 关键字的工作方式

    const TestObject= {
        testName:"testValue",
        testFunction: function(){
            var result = this.testName+ "result"; 
            return result ;
        }
    }
    

    您可以在此处找到有关它的更多信息: Arrow Functions and This

    【讨论】:

    • 这将导致undefinedresult OP 已经提到它。 “this.testName”在 javascript 对象中不起作用
    • 我得到一个错误 => TypeError: Cannot read property 'testName' of undefined
    • testName 的范围仅限于 TestObject,因此无法通过this 直接访问它。你必须通过TestObject。没有解决方法。不过,你可以像 this.TestObject.testName 那样做。
    • 好的。但不使用箭头功能它可以工作!我以为箭头函数和普通函数一样……
    • @BeshambherChaukhwan - 1. 这不是范围问题,2. this.TestObject.testName 不起作用。
    猜你喜欢
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2021-01-17
    • 2018-06-08
    • 1970-01-01
    • 2017-12-16
    • 2013-11-21
    • 1970-01-01
    相关资源
    最近更新 更多