Js es6类的构造函数运行前先实例化构造函数
Js es6 class constructor function run before the constructor instantiate
我有一个es6类实例化一个变量从函数调用,但问题是,似乎该函数是在构造函数实例化和抛出错误之前运行:
constructor() {
this.userSelections = {
types : this.getTypes(),
providers: this.getProvider()
}
}
getProvider() {
// here its throw error that this.userSelections is undefined
var activeType = this.userSelections.types.some(( type ) => {
return type.active;
});
}
问题是什么,我该如何处理这种情况? 问题与类、ES6或Babel无关。以下是您的问题的简化版本:
var foo = {
bar: 42,
baz: foo.bar * 2
};
这将抛出一个错误,因为foo
在访问foo.bar
时还没有初始化。
在您的例子中,您在创建您想要分配给this.userSelections
的对象期间调用getProvider
。this.userSelections
或其值不存在,仍在构造中
初始化值可分为两步:
this.userSelections = {
types: this.getTypes()
};
// now that `this.userSelections` exists, we can call `this.getProvider` without problems
this.userSelections.providers = this.getProvider();
或者重构你的代码,使getProviders
接受types
作为参数,可能是这样的:
class Foo {
constructor() {
let types = this.getTypes();
this.userSelection = {
types,
providers: this._getProvider(types)
};
}
_getProvider(types) {
var activeType = types.some(( type ) => {
return type.active;
});
// ...
}
getProvider() {
return this._getProvider(this.userSelection.types);
}
}
相关文章:
- 销毁构造函数实例
- 如何实例化其构造函数使用 yield 的对象
- 在实例化期间使用构造函数变量
- 是否可以在没有构造函数参数的情况下实例化空对象/对象
- 构造函数中的私有函数声明是否在每次创建实例时重新实例化
- 这种实例化构造函数方法的风格是什么
- 通过链接到具有不同数量参数的构造函数来实例化类
- 与自实例化构造函数相比,使用对象文字是否具有性能优势
- 从构造函数实例化的类范围对象
- 使用Object.keys获取用于创建构造函数实例的属性,然后打印继承的属性
- 将新返回命名函数构造函数实例-
- 测试构造函数实例化另一个类
- Javascript构造函数、原型和实例化.架构和框架
- 简单对象vs.工厂vs.构造函数-实例
- 在实例化对象(使用构造函数)时设置唯一的id
- 如何使用require()和导出从函数实例化的对象,以及原型方法
- prototype属性的构造函数实例的奇怪行为
- 通过构造函数实例化时添加额外属性的Javascript语法
- JS中的函数构造函数初始化
- 为什么我们使用“原型”?属性向构造函数实例添加方法