gpt4 book ai didi

javascript - 通过 getter 和自定义 toString() 访问的对象属性的长度未定义

转载 作者:行者123 更新时间:2023-11-28 13:26:09 25 4
gpt4 key购买 nike

下面是一个 JavaScript 对象示例:

var foo = {
valueObj: {
value: 'hello',
toString: function() { return this.value }
},
get val() {
return this.valueObj;
}
}

我需要获取存储在 foo.valueObj.value 中的字符串“hello”的长度。我需要使用以下精确语法访问它:

foo.val.length

foo.val 应该返回 valueObj,而且确实如此。然后调用 foo.val.length 应调用 valueObj 的自定义 toString 方法,返回“hello”,并且 .length 应返回该字符串的长度。但事实并非如此!

以下内容确实有效,证明当需要原始值时,确实会通过 getter 调用 toString() 方法:

foo.val + ' world'
//=>'hello world'

为什么.length不会调用toString()方法?我怎样才能在这里实现我所需要的?谢谢!

最佳答案

this.valueObj 没有 length 属性。询问其 length 属性不会导致自动转换为字符串(而连接字符串确实会导致强制转换为字符串)。

如果您确实需要使用确切的语法(并且无法首先执行对字符串的转换),那么简单的解决方案是将 length getter 添加到 valueObj .

var foo = {
valueObj: {
value: 'hello',
toString: function() { return this.value },
get length() {
return this.toString().length
}
},
get val() {
return this.valueObj;
}
}

关于javascript - 通过 getter 和自定义 toString() 访问的对象属性的长度未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28971918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com