Не удается получить обновленный массив из функции класса в js - PullRequest
1 голос
/ 26 мая 2020
class Store {
  constructor(items) {
    this._items = items;
  }
  getItems() {
    const storages = [this._items];
    return storages;
  }
  addItem(item) {
    storages = [...this._items, ...item];
    return storages;
  }
}

const storage = new Storage([
  'cucumber',
  'tomato',
  'banana',
  'egg',
]);

const items = storage.getItems();
console.table(items); 

storage.addItem.bind('garlic');
console.table(storage.items); 

Вместо получения обновленного массива из storage.addItem.bind ('garli c') я продолжаю получать 'undefined'. функция addItem - добавить элемент в массив. Не могу реализовать это в классе.

почему я получаю undefined из привязки? что мне нужно сделать, чтобы исправить грограмму?

Ответы [ 2 ]

3 голосов
/ 26 мая 2020

попробуйте

class Store {
  constructor(items) {
    this._items = items;
  }
  getItems() {
    return this._items;
  }
  addItem(item) {
    this._items = [...this._items, item]; // Fix
    return this._items;
  }
}

const storage = new Store([ // Fix
  'cucumber',
  'tomato',
  'banana',
  'egg',
]);

let items = storage.getItems(); // Fix
console.table(items); 

storage.addItem('garlic'); // Fix
items = storage.getItems(); // Get new items because created new array after add item
console.table(items); 

или попробуйте, если вам не нужно создавать новый массив после добавления элемента

class Store {
  constructor(items) {
    this._items = items;
  }
  getItems() {
    return this._items;
  }
  addItem(item) {
    this._items.push(item); // Fix
    return this._items;
  }
}

const storage = new Store([ // Fix
  'cucumber',
  'tomato',
  'banana',
  'egg',
]);

let items = storage.getItems(); // Fix
console.table(items); 

storage.addItem('garlic'); // Fix
console.table(items); 

bind вернуть новую функцию с заданным контекстом. но в вашем случае это не обязательно

1 голос
/ 26 мая 2020

Похоже, вы перепутали привязку с тем, что пытаетесь сделать sh. Цель метода bind - дать вашей функции постоянное this во время вызова. Не беспокойтесь об этом слишком сильно. Также кажется, что вы передаете массив при вызове своего нового класса, поэтому вам не нужно добавлять еще один в свой метод getItems. Это должно работать:

class Store {
  constructor(items) {
    this._items = items;
  }
  getItems() {
    return this._items
  }
  addItem(item) {
    this._items.push(item)
    return item;
  }
}

const storage = new Storage([
  'cucumber',
  'tomato',
  'banana',
  'egg',
]);

const items = storage.getItems();
console.log(items); 

const itemAdded = storage.addItem('garlic');
console.log(itemAdded); 

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...