是否可以在提案的当前迭代中定义一个将在实例级别公开的装饰器
例如
function once(target, name, descriptor) {
let {get} = descriptor;
var called = false, result;
if (typeof get === "function") {
descriptor.get = function() {
console.log(called);
if (!called) {
result = get.apply(this, arguments);
called = true;
}
return result;
}
}
return descriptor;
};
class X {
@once
get y() {
return Math.random();
}
}
var x1 = new X;
var x2 = new X;
// Should be false
console.log(x1.y !== x2.y)
我想要类似于做的行为
class X2 {
constructor() {
// Set descriptor manually for this instance
let descriptor = Object.getOwnPropertyDescriptor(X2.prototype, 'y');
let d = Object.assign({}, descriptor);
once(X, "y", d);
Object.defineProperty(this, 'y', d);
}
get y() {
return Math.random();
}
}