在ES6中无法更新类属性。

问题描述 投票:0回答:1

如何翻译成ES6?

function Mock() { };
Mock.prototype.foo = 'bar';
var obj = new Mock();
console.log(obj.foo);
Mock.prototype.foo = 'Something else';
console.log(obj.foo);

我试过这样做。

class Mock {
  foo = 'bar';
}
const obj = new Mock();
console.log(obj.foo);
Mock.prototype.foo = 'Something else';
console.log(obj.foo);

但是没有用 因为类的属性实际上是直接附加在实例对象上的 而不是附加在... ... Mock.prototype.

javascript ecmascript-6 prototype
1个回答
2
投票

在我看来,改变原型是一种反常的做法。但如果你真的想这样做,你应该继续使用和以前一样的语法来定义属性。

class Mock { }
Mock.prototype.foo = "bar";

const obj = new Mock();
console.log(obj.foo);
Mock.prototype.foo = "Something else";
console.log(obj.foo);

0
投票
  • 因为在ES6中,类的.prototype属性是不可写和不可配置的。
  • 如果你想改变,就用 对象.defineProperty

    class Mock {
      foo = 'bar'
    }
    const obj = new Mock()
    console.log(obj.foo)
    
    Object.defineProperty(obj, 'foo', {
      value: 'Something else',
      writable: true,
      enumerable: false,
      configurable: false
    })
    
    console.log(obj.foo)
© www.soinside.com 2019 - 2024. All rights reserved.