我正在构建一个应用程序,其中有一个 View ,它是一个需要一堆属性来显示、创建、更新等的类。
我这样设置我的 View
export default class {
constructor(view) {
this.id = view.id;
this.title = view.title;
}
}
我希望能够在创建新 View 时初始化View
,我认为正确的方法是这样的
let newView = new View()
不幸的是,如果我这样做,构造函数就不会被调用。当我运行此测试时
expect(newView.id).toBe(未定义)
我收到错误无法读取未定义的属性 id
。
let newView = new View({})
返回正确,但我发现提供一个空对象有点奇怪。它是否正确?有没有更好的方法来实例化空类?
最佳答案
这是正确的。
您的构造函数正在被调用,但它是用参数定义的。在第一次调用中,您传递空对象:
let newView = new View();
异常(exception):
export default class {
constructor(view) { //view = 'undefined'
this.id = view.id; //This line will cause exception.
this.title = view.title;
}
}
因此,构造函数中的参数“view”将是未定义的,并且您将得到异常。
当你打电话时:
let newView = new View({}); // new object {}
您的参数“view”将被定义,您可以访问它的“props”。 (当然它们都将为空)
补充: 不幸的是,构造函数没有重载,它们仍然像常规 JS 函数一样工作,您可以采取一种解决方法:
export default class {
constructor(view) {
view = view || {}; //this is default value for param.
this.id = view.id;
this.title = view.title;
}
}
然后你就可以使用 new View() 和 new View({object})
关于javascript - 初始化一个空的 ES6 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39951818/