Доступ / вызов метода класса из другого класса в шаблоне посредника javascript - PullRequest
0 голосов
/ 04 февраля 2020
class Customer {
    constructor(name) {
        this.name = name;
    }
    send(amount, to) {
        new GooglePay().send(amount, this, to);
    }
    receive(amount, from) {
        console.log(`Payment of ${amount} from ${from} to ${this.name} is succesful`);
    }
}

проблема основана на шаблоне посредника. Итак, выше я определил своего клиента, который может отправлять и получать деньги. Поэтому я создал класс под названием GooglePay, который опосредует транзакции между клиентами. У клиента есть функция отправки, с помощью которой он может отправлять деньги, она принимает 2 аргумента (сумму, до)

Эта функция должна фактически вызываться или получаться экземпляром GooglePay, который затем отправляет получателю сумму после проверки, получатель зарегистрировался

class GooglePay {
    constructor() {
        this.customerBase = [];
    }
    register(name) {
        this.customerBase.push(name);
        return this;
    }
    send(amount, from, to) {
        if (this.customerBase.filter(cust => cust === to)) {
            to.receive(amount, from);
        } else {
            console.log('This customer does not exist');
        }
    }
}

Пожалуйста, помогите мне, я застрял, и я не понимаю, как я могу получить доступ к методам других классов из класса.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2020

Итак, я нашел правильное решение для моей проблемы, проверьте его:

class Customer {
    constructor(name) {
        this.name = name;
        this.googlepay = null;
    }
    send_money(amount, to) {
        this.googlepay.transaction(amount, this, to);
    }
    receive_money(amount, from) {
        console.log(`payment of ${amount} from ${from} to ${this.name} is succesful`);
    }
}

class GooglePay {
    constructor() {
        this.customer_base = [];
    }
    register_customer(customer_class) {
        this.customer_base.push(customer_class);
        customer_class.googlepay = this;
    }
    transaction(amount, from, to) {
        this.customer_base.filter(cust => {
            if (cust.name === to) {
                cust.receive_money(amount, from.name);
            }
        });
    }
}

при внимательном наблюдении вы можете увидеть свойство в моем конструкторе класса клиента с именем this.googlepay = null

Вот в чем и заключается хитрость. Приветствие ios приятель Отлично решая головоломку.

0 голосов
/ 04 февраля 2020

Не имеет значения, используете ли вы какие-либо фреймворки, хотите ли вы вызывать класс js (начиная с ECMAScript 2015 (6-е издание, ECMA-262) ). Для вызова функций или свойств из класса вы можете go, например:

//expecting that the class is in another file but same directory
const Gpay = require('./googlePay'); //<-- don't need the .js file extension
const googlePay = new GPay();

Теперь вы можете использовать класс следующим образом:

googlePay.register('Name');
...