Gol*_*aal 3 javascript get set getter-setter ecmascript-5
我不确定我是否做对了.
这个例子直接来自MDN(Mozilla Developer Network):
var bValue;
Object.defineProperty(o, "b", {get : function(){ return bValue; },
set : function(newValue){ bValue = newValue; },
enumerable : true,
configurable : true});
Run Code Online (Sandbox Code Playgroud)
会发生什么 - 它创建了一个名为bValue的全局变量,但未完成.我知道这个例子只展示了它的使用,因此它可以创建一个全局变量.但是,如果我要在应用程序中使用它,我将通过添加this关键字稍微修改它:
Object.defineProperty(o, "b", {get : function(){ return this.bValue; },
set : function(newValue){ this.bValue = newValue; },
enumerable : true,
configurable : true});
Run Code Online (Sandbox Code Playgroud)
现在,该对象o将具有属性b,同时它还将具有另一个属性bValue.用户(程序员)将仅暴露于'b'而不是'bValue',尽管他仍然可以直接访问bValue - 我看不出它是如何被阻止的.
我理解属性b和属性bValue可能并不总是相同,但b取决于值,bValue因为getter和setter允许我们在赋值之前预处理bValue b.
主要问题是,我做对了吗?或者我在这里遗漏了什么?
你似乎在寻找关闭.这是一种编码模式,使您可以使用私有变量,只显示您想要公开的内容(公共变量).
(function() {
var bValue;
Object.defineProperty(o, "b", {get : function(){ return bValue; },
set : function(newValue){ bValue = newValue; },
enumerable : true,
configurable : true});
})();
Run Code Online (Sandbox Code Playgroud)
它创建一个函数并立即执行它.这似乎没用,但由于函数引入了一定范围的作用域,bValue因此无法通过这种方式在函数内部访问.
该o.b属性充当开发人员和值之间的委托.你无法访问bValue自己.(虽然在这个例子中,getter/setter显然会使它们与直接使用它们完全相同bValue.)