Javascript 从嵌套在对象中的函数访问类属性
编辑:我已经用更接近我实际代码的东西替换了我的初始示例,它仍然演示了相同的问题(在JSFIDLE和TypeScript的游乐场上) 假设我有一个定义如下的Typescript类,其中一个属性由嵌套在另一个对象属性中的getter访问。显然,Javascript 从嵌套在对象中的函数访问类属性,javascript,class,typescript,this,Javascript,Class,Typescript,This,编辑:我已经用更接近我实际代码的东西替换了我的初始示例,它仍然演示了相同的问题(在JSFIDLE和TypeScript的游乐场上) 假设我有一个定义如下的Typescript类,其中一个属性由嵌套在另一个对象属性中的getter访问。显然,这个在工作日内。周一getter引用的是工作日,而不是实际的 class DayOfWeekSelector { private actual = { monday: false, /*tuesday - sunday would go h
这个在工作日内。周一getter引用的是工作日,而不是实际的
class DayOfWeekSelector {
private actual = {
monday: false,
/*tuesday - sunday would go here*/
}
public weekdays = {
get monday() {
return this.actual.monday;
},
set monday(newVal) {
this.actual.monday = newVal;
},
/*tuesday - sunday would go here*/
}
}
const dow = new DayOfWeekSelector();
//I want this to read the value of the 'monday' property of the private 'actual' object
//but instead, it tries to read 'actual' as a property of 'weekdays', and fails
console.log(dow.weekdays.monday);
JSIDLE链接:
我知道在这个简单的演示中,我可以直接将getter从对象提取到类上的属性中,然后this
将引用该类。但是,有没有其他方法可以从类上另一个对象内的getter和setter访问DayOfWeekSelector
的属性,而不添加混乱?不要使用类属性语法,而是显式地将它们写入构造函数,在构造函数中可以使用局部变量:
class DayOfWeekSelector {
public weekdays;
constructor() {
const actual = {
monday: false,
/*tuesday - sunday would go here*/
};
this.weekdays = {
get monday() {
return actual.monday;
},
set monday(newVal) {
actual.monday = newVal;
},
/*tuesday - sunday would go here*/
};
}
}
const dow = new DayOfWeekSelector();
console.log(dow.weekdays.monday);
当然,如果这些是实际的getter和setter,它们除了访问“private”对象之外什么都不做,那么使用它们没有任何好处,直接公开actual
对象要简单得多。最好提供完整的代码,而不是这个简单的演示,这就是你遇到的问题。如果你运行上面的代码,它会打印“无法从myFunc访问”。那么,呃,问题出在哪里呢?如果您将JSFIDLE打印配置为与Babel一起运行,那么JSFIDLE打印的副本也可能“不可访问”。如果你不和巴贝尔一起跑。。。您无法运行此代码,因为标准JS中还没有类属性初始值设定项?@eli bd通过在函数外部设置对this
的引用,可以轻松解决此问题。在这种情况下我该怎么做?好主意!我不知道我能这样做。是的,我的完整代码每天都有逻辑;他们不仅仅是简单的接受者/接受者。