无法在NodeJS中重新定义属性(但可以在浏览器中重新定义)

k7fdbhmy  于 2023-01-16  发布在  Node.js
关注(0)|答案(1)|浏览(162)

我想重新定义一个类中的现有属性(这是为了实验,我知道我不应该)。
出于某种原因,以下代码在浏览器(Chrome)中有效,但在Node.js(v18.12.0)中无效。

function re(instance, name, val){
      let _value = val;
      Object.defineProperty(instance, name, {
           get: () => { return _value },
           set: (v) => { return _value = v }
      })
      return val;
}

class A {
    prop = re(this, 'prop', 456)
}

const a = new A()
console.log(a.prop)

Chrome控制台输出将是456,但节点将像nope,今天没有重新定义,而是这样:TypeError: Cannot redefine property: prop。这很可悲。我在我的PC Plus上测试了一些在线NodeJS解释器(Replitidercom)。

wlsrxk51

wlsrxk511#

您需要提供configurable属性。

function re(instance, name, val){
      let _value = val;
      Object.defineProperty(instance, name, {
           get: () => { return _value },
           set: (v) => { return _value = v },
           configurable: true
      }, )
      return val;
}

class A {
    prop = re(this, 'prop', 456)
}

const a = new A()
console.log(a.prop)

您可以在这里参考MDN文档。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cant_redefine_property

相关问题