我想在属于另一个类的构造函数中使用一种方法,但是我得到了错误: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
}
}
非常感谢您的帮助或建议。
答案 0 :(得分:0)
在示例代码中,因为您继承了StorageCtrl
中的TaskModel
类。因此,无需创建对象或静态引用来访问getItemFromStorage
。
如果您使用this
是合适的,因为getItemStorage也是TaskModel的方法。
所以StorageCtrl.getItemFromStorage
应该是this.getItemFromStorage()
,它应该可以工作。
如果您希望它是两个不同的类。
您可以通过
例如,
class Sample{
sayHello(){
console.log('Hello');
}
}
要从其他类访问sayHello
,您需要先创建对象,然后再访问它。
class Sample1{
constructor(){
var obj = new Sample();
obj.sayHello();
}
}
我们将方法声明为静态
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