Reputation: 16755
I am learning about PropertyDescriptors. Why do I get ReferenceError
in the following code ? I have an object y
. I want to define a property foo
in it and have created get
and set
functions.
// Equivalent definition of 'foo' using a PropertyDescriptor
var y = {};
Object.defineProperty(y, 'foo', {
get: function() {
console.log('in y.foo getter');
return this.foo;
},
set: function() {
console.log('in y.foo setter. value = ' + value);
return this.foo;
},
enumerable: true,
configurable: true
});
y.foo=1
console.log(y.foo)
Upvotes: 1
Views: 697
Reputation: 2534
The issue is your setter function is wrong, you forget to set the property value. The modified function will be:
set: function(value) {
console.log('in y.foo setter. value = ' + value);
foo = value;
},
Also, use foo
instead of this.foo
.
The working snippet is given here:
// Equivalent definition of 'foo' using a PropertyDescriptor
var y = {};
Object.defineProperty(y, 'foo', {
get: function() {
console.log('in y.foo getter');
return foo;
},
set: function(value) {
console.log('in y.foo setter. value = ' + value);
foo = value;
},
enumerable: true,
configurable: true
});
y.foo = 1
console.log(y.foo)
Upvotes: 0
Reputation: 28475
Try following. You were not passing the argument in set
function. Also the set function should set
the value in variable
and not return like get
var y = {};
Object.defineProperty(y, 'foo', {
get: function() {
console.log('in y.foo getter');
return foo;
},
set: function(value) {
console.log('in y.foo setter. value = ' + value);
foo = value;
},
enumerable: true,
configurable: true
});
y.foo = 1
console.log(y.foo)
Upvotes: 1