gpt4 book ai didi

javascript - 如何在 ES6 或更高版本中的子对象 getter 中捕获父类 'this'?

转载 作者:行者123 更新时间:2023-12-01 01:33:36 25 4
gpt4 key购买 nike

这是一个简单的 JavaScript 代码:

class Test {
constructor(val) {
this._value = val;
this.child = {
get value() { return this._value; },
getValue: () => { return this._value; }
};
}
}

let o = new Test(1);
console.log(o.child.value);
console.log(o.child.getValue());

输出:

undefined
1

在子对象 child 中,我想让 getter get value() 生成与 lambda getValue() 相同的值>,即正确捕获父级的 this 并生成 1 而不是 undefined

中是否有一种优雅的方式来做到这一点?或者我应该使用 lambda 并放弃 getter?

我可能会这样做:

    this.child = {
parent: this,
get value() { return this.parent._value; },
};

但是我不想公开 child.parent,只想公开 child.value

最佳答案

valuechild在构造函数中定义,并且 value应该是私有(private)的,只能通过 child 访问。您可以设置value作为闭包中的普通变量,并通过 child 访问它 getter 和 setter :

class Test {
constructor(val) {
let value = val;
this.child = {
get value() { return value; },
set value(v) { value = v; },
};
}
}

let o = new Test(1);
console.log(o.child.value);
o.child.value = 5;
console.log(o.child.value);

如果您需要value里面Test ,您可以随时通过 child 访问它:

class Test {
constructor(val) {
let value = val;
this.child = {
get value() { return value; },
set value(v) { value = v; },
};
}

get value() {
return this.child.value;
}

set value(v) {
this.child.value = v;
}
}

let o = new Test(1);
console.log(o.value);
o.value = 5;
console.log(o.value);

关于javascript - 如何在 ES6 或更高版本中的子对象 getter 中捕获父类 'this'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53027183/

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