javascript - 初始化一个空的 ES6 类

标签 javascript es6-class

我正在构建一个应用程序,其中有一个 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/

相关文章:

javascript - 如何在 ES6 类中使用匿名函数

javascript - 单击具有长度的按钮时如何发出警报?

javascript - 如何在D3中渲染对象数据?

javascript - 如何仅在分配时应用 Webkit-input-placeholder

javascript - 如何像本示例中使用工厂函数一样使用 es6 类的组合?

javascript - 获取类实例中的 block 范围变量

javascript - 获取 Session 值到 Javascript

javascript - 使用socket.io从Mt. Gox的 "now"值获取日期/时间?

javascript - 在类内的函数内创建函数

javascript - 获取类中的所有静态 getter