2017-02-07 2 views
0

В данных двух классов:метод вызова, когда метод в другом классе называется

class Person { 
    constructor(name) { 
    this.name = name; 
    } 

    feedCats() { 
    console.log(this.name + ' fed the cats'); 
    } 
} 

и:

class Cat { 
    constructor(name) { 
    this.name = name; 
    } 

    meow() { 
    console.log(this.name + ' says \'meow\''); 
    } 
} 

Я хочу, чтобы метод meow() в каждом случае Cat «s будет называться всякий раз, когда любой экземпляр из Person вызывает feedCats() метод. Как я могу это сделать?

Я предполагаю, что, возможно, обработка событий будет необходима, однако в JavaScript event тип необходим при использовании метода addEventListener(), и я не могу найти подходящий. Мне нужно быстрое решение JavaScript или jQuery.

ответ

1

Я считаю, что есть очень простой путь для решения этой проблемы.

Move feedCats к новому классу называется CatFeeder, и добавить которых кошки должны быть поданы до того feed вызывается:

class CatFeeder extends Person { 
    constructor(...args) { 
     super(...args); 

     this.cats = []; 
    } 

    addCat(name) { 
     this.cats.push(new Cat(name)); 
    } 

    feed() { 
     this.cats.forEach(cat => cat.meow()); 

     console.log(`${this.name} fed the cats and they said meow!`); 
    } 
} 


var catFeeder = new CatFeeder("Matías"); 
catFeeder.addCat("Inno"); 
catFeeder.addCat("Darky"); 

catFeeder.feed(); 

В конце дня, Person не кошки фидер в se, но есть CatFeeder (кто человек, но не любой человек). Для меня это кажется более естественным, чем рассмотрение того, что любой человек обладает свойствами и поведением, чтобы кормить кошку.