假设我有一个像这样设置的对象属性:
Object.defineProperty(this, "currentPath", {
get: function () {
// some logic here
return this.currentPath.length === 0;
}.bind(this),
set: function(value) {
// some logic here
this.currentPath = value;
}.bind(this)
});
在对象之外我希望每个人都使用getter和setter来访问currentPath
属性,就像这个navigator.currentPath
一样,但是在对象内部我想通过设置者来设置这个属性。我唯一的选择是有两个属性 - 一个是通过getter访问,另一个是内部设置?
答案 0 :(得分:0)
另一种选择是将属性的实际值存储在对象的原型中(必须与对象本身一起创建),同时保持getter和setter将原型自己的属性暴露给外部。
var obj =
Object.create(
{ currentPath: "" },
{
currentPath:
{
get: function () {
return this.__proto__.currentPath;
},
set: function (currentPath) {
this.__proto__.currentPath = currentPath;
}
}
}
);
此处obj.currentPath
将调用getter或setter,而obj.__proto__.currentPath
将直接访问value属性。
不是使用this.__proto__.currentPath
在内部访问属性,而是可以根据需要更改调用上下文:
function logPath()
{
console.log(this.currentPath);
}
this.logPath(); // use getter
logPath.call(this.__proto__); // don't use getter
// .bind is also an option...
当然,对象和原型都可以在代码中随处访问,但是根据用例,这可能是可接受的甚至是理想的行为(只需使用不需要getter / setter开销的原型)。