Manu Chadha
Manu Chadha

Reputation: 16755

Why am I getting ReferenceError:value is not defined

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

Answers (2)

I. Ahmed
I. Ahmed

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

Nikhil Aggarwal
Nikhil Aggarwal

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

Related Questions