如何将其转换为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
。
发布于 2020-06-03 18:28:59
在我看来改变原型是一种反模式。但是,如果您真的想这样做,您应该继续使用与前面相同的语法来定义属性:
class Mock { }
Mock.prototype.foo = "bar";
const obj = new Mock();
console.log(obj.foo);
Mock.prototype.foo = "Something else";
console.log(obj.foo);
发布于 2020-06-03 18:14:22
因为在Object.defineProperty中,类的.prototype属性是不可写的,并且是不可配置的,如果您想要更改,那么就使用
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)
https://stackoverflow.com/questions/62179617
复制相似问题