为什么我得到ReferenceError:未定义value

时间:2018-06-15 05:29:39

标签: javascript

我正在学习PropertyDescriptors。为什么我在以下代码中获得ReferenceError?我有一个对象y。我想在其中定义一个属性foo,并创建了getset个函数。

// 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)

2 个答案:

答案 0 :(得分:1)

试试以下内容。你没有在set函数中传递参数。此外,设置函数应该set variable中的值,而不是像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)




答案 1 :(得分:0)

问题是你的setter函数错误,你忘了设置属性值。修改后的功能将是:

set: function(value) {
    console.log('in y.foo setter. value = ' + value);
    foo = value;
},

另外,请使用foo代替this.foo

这里给出了工作片段:



// 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)