2016-12-06 4 views
0

Ich lerne Knoten und habe ein benutzerdefiniertes Modul erstellt.NOOB benutzerdefiniertes Modul Ereignis

Meine benutzerdefinierte Modul einfach definiert eine Klasse mit einer einzigen Methode.

Ich möchte diese Methode einmal aus dem definierten Klassenobjekt aufrufen können.

Ich möchte auch eine Variable in meinem Hauptcode von dieser Klassenmethode verweisen können.

In der "Open" -Methode habe ich zwei console.log-Befehle. Beim zweiten Fehler wird "ReferenceError: thisVar ist nicht definiert" angezeigt. Wenn ich die 2. console.log auskommentieren, die sich auf den Fehler "open" bezieht, wird gedruckt.

Wie kann ich thisVar von der Klassenmethode referenzieren?

Edit1 Ich verstehe aus den Antworten, dass "thisVar" außerhalb des Umfangs der Klasse und daher nicht verfügbar ist. Warum funktioniert "thatVar" so, wie es auch außerhalb der Klasse definiert ist? Ist der Bereich relativ zum Modul und nicht zur Klasse?

Das ist mein Haupt js Code:

"use strict"; 

const Door = require('door'); 
const mydoor = new Door("green"); 

var thisVar = 1; 

console.log(mydoor.colour); 
mydoor.open(); 

Das ist mein "Tür" Modul:

"use strict"; 

var thatVar = 2; 

class Door { 

    constructor(colour) { 
    this.colour = colour; 
    } 

    open() { 
    console.log("open"); 
    //console.log(thisVar); 
    console.log(thatVar); 
    } 

} 

module.exports = Door; 
+1

Meinten Sie 'mydoor.open()'? Ich sehe auch 'thisVar' nirgendwo definiert. Die 'thisVar' in der Tür und die' thisVar' in main sind in keiner Weise miteinander verknüpft. – Li357

+0

Tippfehler behoben. Kann die Klassenmethode thisVar in main überhaupt referenzieren? – Dercni

+1

Nein, sie haben überhaupt keine Assoziation. Wenn überhaupt, könnte man 'thisVar' durch den Konstruktor wie' colours' übergeben. – Li357

Antwort

1

thisVar ist nicht in den Anwendungsbereich des door Moduls. Die Door muss irgendwie auf thisVar zugreifen, also würde ich an den Konstruktor übergeben.

class Door { 
    constructor(colour, thisVar) { 
    this.colour = colour; 
    this.thisVar = thisVar; 
    } 
    open() { 
    console.log('open'); 
    console.log(thisVar); 
    } 
} 
module.exports = Door; 

Haupt js:

const door = require('door'); 
const myDorr = new Door('green', 1); 
+0

Der Variablenbereich ist also auf das Modul und nicht auf die Klasse selbst beschränkt. Ich habe die require-Anweisung immer als Include-Anweisung dargestellt, die den Code einfach in den Hauptcode einfügt. – Dercni

1

Door.js

// Door.js 
    'use strict'; 

module.exports = class Door { 

    constructor(colour) { 


    this.colour = colour; 
    } 
    open(ThisVar) { 
    console.log("open"); 
     if(ThisVar) 
    console.log(ThisVar); 
    } 
    } 

main.js

'use strict'; 

    var Door = require('./Door.js'); 

    var someone = new Door("pink"); 
var a=7; 
someone.open(a); 
someone.open(); 

Verwandte Themen