0
我想在第一次初始化我的对象时设置属性x,然后调用Object.defineProperty。如果我尝试首先访问foo.x,控制台会告诉我“值未定义”。在Object.defineProperty之前设置对象初始化的属性
var foo = {x:20};
Object.defineProperty(foo, "x", {
writeable: true,
enumerable: true,
configurable: true,
get: function(){
console.log("Get X value");
return value;
},
set: function(newValue){
console.log("Set X value");
value = newValue;
}
});
console.log(foo.x); // **Uncaught ReferenceError: value is not defined**
foo.x = 1;
console.log(foo.x);
foo.x = 10;
console.log(foo.x);
因为你的getter和setter中的'value'是一个未定义的变量。即使你想以某种方式“引用自己”,你也必须定义它。查看[MDN关于'object.defineProperty()']的示例(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty#Creating_a_property)。 – Passerby
谢谢@Passerby。 – yvesb