我不确定我是否做对了。
这个例子直接来自 MDN(Mozilla 开发者网络):
var bValue;
Object.defineProperty(o, "b", {get : function(){ return bValue; },
set : function(newValue){ bValue = newValue; },
enumerable : true,
configurable : true});
发生的事情是 - 它创建了一个名为 bValue 的全局变量,但没有完成。我知道这个例子只演示了使用,因此如果它创建一个全局变量是可以的。但是如果我要在应用程序中使用它,我会稍微修改它,添加this
关键字:
Object.defineProperty(o, "b", {get : function(){ return this.bValue; },
set : function(newValue){ this.bValue = newValue; },
enumerable : true,
configurable : true});
现在,该对象o
将具有 property b
,同时,它还将具有另一个 property bValue
。用户(程序员)将只接触到“b”而不接触“bValue”,尽管他仍然可以直接访问 bValue——我不知道如何防止它。
我知道属性b
和属性bValue
可能并不总是相同,而是b
取决于值,bValue
因为 getter 和 setter 允许我们在将值分配给之前对 bValue 进行预处理b
。
主要问题是,我做对了吗?或者我在这里错过了什么?