簡體   English   中英

如何在Node.js中使用第二個構造函數的變量? (使用導入/導出)

[英]How to use a variable of second constructor function in Node.js? (using import/export)

我有3個不同的.js文件,這些文件之間通過import/export關鍵字鏈接。 每個文件都有自己的特定功能,如下所示:


  1. Init.js :調用Event.jsTouch.js 將變量發送到Event.js

  2. Event.js :從Init.js接收變量, Init.js event注冊到每個元素。

  3. Touch.js :從Event.js識別event ID,然后將其記錄。


一個問題是Touch.js的構造函數Touch.js不起作用。 瀏覽器無法訪問它。 當我嘗試將其記錄為AB的局部變量時,它始終保持undefined狀態。

我發現的唯一可能的方法是從Init.js創建變量,將它們傳遞給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 }

Event類中,您將回調綁定到this 這是錯誤的,因為在這種情況下, thisEvent實例,並且不包含ab變量。 刪除該行。

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

發送回調時,您要將proTouch綁定到start方法。 因此,綁定在那里。

this.Event.register(this.elem, 'mouseenter', proTouch.start.bind(proTouch), this.C);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM