Я обнаружил, что это прототип Объекта, а не экземпляр ...
Ни в том коде, который вы показали, ни в том случае, если вы не 'Вызываете его странным образом.
Один из способов сделать это - использовать Object.defineProperty
для переопределения свойства.
Например, если вы делаете это для одноразового объекта:
var obj = {
get notifier() {
var value = Math.random();
console.log("Getter called");
Object.defineProperty(this, "notifier", {
value: value
});
return value;
}
};
console.log("First use");
console.log(obj.notifier);
console.log("Second use");
console.log(obj.notifier);
Или, если это не разовое:
function Maker() {
}
Object.defineProperty(Maker.prototype, "notifier", {
get: function() {
var value = Math.random();
console.log("Getter called");
Object.defineProperty(this, "notifier", {
value: value
});
return value;
},
configurable: true
});
var obj = new Maker();
console.log("First use");
console.log(obj.notifier);
console.log("Second use");
console.log(obj.notifier);
Я придерживался описанного выше уровня ES5, поскольку вы, похоже, не использовали какие-либо функции ES2015 +.