babel use _defineProperty与类属性

bjg7j2ky  于 2024-01-04  发布在  Babel
关注(0)|答案(1)|浏览(239)

我使用babel和preset-env,当我使用一个类的属性时,它会用_defineProperty转换它。
举例说明:

class A {
    foo = "bar"
}

字符串
转换为:

function _defineProperty(obj, key, value) {
  key = _toPropertyKey(key);
  if (key in obj) {
    Object.defineProperty(obj, key, {
      value: value,
      enumerable: true,
      configurable: true,
      writable: true,
    });
  } else {
    obj[key] = value;
  }
  return obj;
}
function _toPropertyKey(arg) {
  var key = _toPrimitive(arg, "string");
  return typeof key === "symbol" ? key : String(key);
}
function _toPrimitive(input, hint) {
  if (typeof input !== "object" || input === null) return input;
  var prim = input[Symbol.toPrimitive];
  if (prim !== undefined) {
    var res = prim.call(input, hint || "default");
    if (typeof res !== "object") return res;
    throw new TypeError("@@toPrimitive must return a primitive value.");
  }
  return (hint === "string" ? String : Number)(input);
}
class A {
  constructor() {
    _defineProperty(this, "foo", "bar");
  }
}


这个转换似乎是由@babel/plugin-proposal-class-properties引起的,但我不明白这个转换提供了什么,也不知道它对应于ECMAScript的哪个新特性。

ni65a41a

ni65a41a1#

因为babel真的不知道如果一些愚蠢的东西会使keywritable=false属性不安全,他们重置所有属性行为

相关问题