如何在另一个类的构造函数中使用扩展方法?

时间:2019-11-26 13:20:03

标签: javascript class inheritance extension-methods

我想在属于另一个类的构造函数中使用一种方法,但是我得到了错误:StorageCtrl.getItemsFromStorage不是函数

这是我的代码的一部分:

//Storage Controller
class StorageCtrl {
  constructor() {
    this.getItemsFromStorage();
  }

  getItemsFromStorage() {
    let items;
    if (localStorage.getItem('items') === null) {
      items = [];
    } else {
      items = JSON.parse(localStorage.getItem('items'));
    }
    return items;
  }

这是我从中得到错误的类:

// Model 
class TaskModel extends StorageCtrl {
  constructor(id, name, calories) {
    super();
    this.id = id;
    this.name = name;
    this.calories = calories;

    // Data Structure / State
    this.data = {
      items: [
         {id: 0, name: 'Steack Dinner', calories: 1200},
         {id: 1, name: 'Cookie', calories: 400},
         {id: 2, name: 'Eggs', calories: 300}
           ],
      items: StorageCtrl.getItemsFromStorage(),  // The method that I`m trying to use
      currentItem: null,
      totalCalories: 0
    }
  }

非常感谢您的帮助或建议。

1 个答案:

答案 0 :(得分:0)

在示例代码中,因为您继承了StorageCtrl中的TaskModel类。因此,无需创建对象或静态引用来访问getItemFromStorage。 如果您使用this是合适的,因为getItemStorage也是TaskModel的方法。

所以StorageCtrl.getItemFromStorage应该是this.getItemFromStorage(),它应该可以工作。

如果您希望它是两个不同的类。

您可以通过

  1. 创建对象然后访问它。

例如,

class Sample{
  sayHello(){
    console.log('Hello');
  }
}

要从其他类访问sayHello,您需要先创建对象,然后再访问它。

class Sample1{
  constructor(){
    var obj = new Sample();
    obj.sayHello();
  }
}
  1. 静态方法。

我们将方法声明为静态

class Sample{
  static sayHello(){
    console.log('Hello');
  }
}

并访问sayHello这样的方法

class Sample1{
  constructor(){
    Sample.sayHello();
  }
}

这里引用很少

https://www.sitepoint.com/simple-inheritance-javascript/

https://medium.com/@yyang0903/static-objects-static-methods-in-es6-1c026dbb8bb1

https://javascript.info/static-properties-methods