ES11 新特性解析:meta property

在最新的 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