我使用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的哪个新特性。
1条答案
按热度按时间ni65a41a1#
因为babel真的不知道如果一些愚蠢的东西会使
key
writable=false
属性不安全,他们重置所有属性行为