在最新的 ECMAScript 2020 (ES11) 中,新增了一个非常有用的特性:meta property(元属性)。
什么是 meta property?
meta property 允许我们以计算的方式访问对象的属性。它的语法形式如下:
---------------------------------
这里的 object 代表需要访问属性的对象,而 string 则代表属性的名称。
meta property 的用途
我们可以通过 meta property 来实现各种各样的功能,例如:
1. 动态获取对象属性
如果我们想动态地获取一个对象的属性,可以使用 meta property 来实现:
----- --- - - ---- ------ --- ----- - ------ --------- - - ------------------------ -- ----- ------------------------------------ -- -----
这里的 obj['baz']
和 obj[Symbol.for('baz')]
都会返回 'bar'
,这是因为我们使用了 meta property 来动态获取对象的属性。
2. 自定义对象属性的访问方式
我们可以使用 meta property 来自定义一个对象的属性访问方式,例如:
----- --- - - ----------- ---- ---------- ---- --- ---------- - ------ --------------- - --------------- -- --- -------------- - ----- ----------- --------- - ------------ -- --------------- - ---------- -------------- - --------- - - -------------------------- -- ---- ------------ - -- --- -------------------------- -- ----
这里,我们自定义了 obj 对象的 fullName 属性的访问方式,使其可以实现对 firstName 和 lastName 属性的自动赋值和取值。
meta property 需要注意的地方
由于 meta property 是在对象内部实现的,它对于继承和原型链可能会存在一些影响。例如:
-- ------------- ----- --- - - -- - - ------ ------ -- --- --- --- ----- -------- - ------------------ - -- ---------- -- - ----------- ----- ------------- ----- ----- - ------ ------ - -- -- -------- - ------ - --- - -- - - -- ------------------------ -- - -------------------------------------------------- -- -----
在这个例子中,我们使用 meta property 自定义了 childObj 的 b 属性的访问方式。但是由于 b 属性并没有被定义为可枚举的,因此在获取 childObj 的属性列表时,它并没有被包括进去。
结论
meta property 是一个非常有用的特性,它可以帮助我们动态地访问对象的属性,甚至可以自定义属性的访问方式。但是在使用时需要注意继承和原型链等问题,并谨慎使用 meta property 来定义不可枚举的属性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6715ba24ad1e889fe218a052