Как использовать переменную второй функции конструктора в Node.js? (используя импорт / экспорт) - PullRequest
0 голосов
/ 08 июля 2019

У меня есть 3 разных .js файла, которые связаны между собой ключевыми словами import/export.Каждый из файлов имеет свои специфические функции, такие как:


  1. Init.js: вызывает Event.js и Touch.js.Отправьте переменные в Event.js.

  2. Event.js: получает переменные из Init.js и регистрирует event для каждого из элементов.

  3. Touch.js: распознает идентификатор event из Event.js и регистрирует его.


Проблема в конструкторефункция Touch.js вообще не работает.Браузер не может получить к нему доступ.Он продолжает срабатывать undefined, когда я пытаюсь записать в него локальные переменные с именами A и B.

Единственный возможный способ, который я нашел, - создать переменные из Init.js, passих к Event.js и снова к Touch.js, как я сделал ниже.

Есть ли способы использовать локальные переменные своей собственной функции конструктора?

См. кодниже:

//============== Init.js ==============
'use strict';
import {Event} from './event.js';
import { proTouch } from './touch.js';
const slider = (function() {
    class Slider {
        constructor(elem) {
            this.elem = document.querySelectorAll(elem);
            this.C = false;
            this.Event = new Event();
            this.Event.register(this.elem, 'mouseenter', proTouch.start, this.C);
        }
    }
    return {
        initialize: new Slider('.box')
    }
}());

//============== Event.js ==============

export class Event {
    constructor() {

    }
    register(node, eventName, callback, flag) {
        let bind = callback.bind(this);
        node.forEach(cur => {
            cur.addEventListener(eventName, (e) => bind(e, flag))
        })
    }
}


//============== Touch.js ==============

class Touch {
    constructor() {
        this.A = false;
        this.B = true; // <-- I want to use this constructor function.
    }
    start(e, flag) {
        console.log(e.type, this.A, this.B, flag); // <-- this.A and this.B fire undefined.
    }
}
const proTouch = new Touch();
export { proTouch }

1 Ответ

1 голос
/ 08 июля 2019

В вашем классе Event вы связываете обратный вызов с this. Это неправильно, потому что в этом контексте this является экземпляром Event и не содержит переменную a или b. Удалить эту строку.

let bind = callback.bind(this);//Wrong. Delete this line.

При отправке обратного вызова вы хотите привязать proTouch к методу start. Так что связывайтесь там.

this.Event.register(this.elem, 'mouseenter', proTouch.start.bind(proTouch), this.C);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...