JavaScript中使用方括号访问对象getter属性的疑问
JavaScript getter 属性的两种访问方式解惑
问题场景
在Codecademy的JavaScript对象属性测验中,有这样一道题:
以下哪行代码能打印tempObj对象中_num键保存的值?
给出的代码示例:
let tempObj = { _num: 22, get num() { return this._num; } };
正确答案包含console.log(tempObj['num']);,但这里有个疑问:给num加引号变成字符串后,为什么还能访问到定义的getter?
解惑
其实核心在于JavaScript对象属性的访问逻辑:
- 对象的属性名(包括你定义的getter这种访问器属性),底层都是以字符串形式存储的。
- 访问对象属性有两种等价方式:
- 点符号:
tempObj.num—— 要求属性名是合法标识符 - 方括号符号:
tempObj['num']—— 支持字符串、变量等作为属性名
- 点符号:
- 你定义的
get num(),本质是给tempObj添加了一个名为"num"的访问器属性,和普通属性的存储逻辑一致。不管用哪种访问方式,都是根据字符串"num"去查找对应的属性,自然会触发这个getter方法,返回_num的值22。
简单来说,tempObj.num和tempObj['num']是完全等价的写法,只是语法形式不同,最终都会指向同一个访问器属性。
内容的提问来源于stack exchange,提问作者shruthituplur
相关产品推荐
相关产品推荐

