gpt4 book ai didi

javascript - 如何从内部设置属性而不使用setter

转载 作者:行者123 更新时间:2023-11-28 06:58:00 25 4
gpt4 key购买 nike

假设我有一个像这样设置的对象属性:

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 访问,另一个在内部设置?

最佳答案

另一种选择是将属性的实际值存储在对象的原型(prototype)中(必须与对象本身一起创建),同时保留 getter 和 setter 以将原型(prototype)自己的属性暴露给外部。

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...

当然,对象和原型(prototype)都可以在代码中的任何地方访问,但是根据用例,这可能是可接受的甚至是理想的行为(只需在不需要 getter/setter 开销的情况下使用原型(prototype))。

关于javascript - 如何从内部设置属性而不使用setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32411055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com