2017-12-01 1 views
-3

Ich habe den folgenden Code. der Code in Initializer Ich möchte ein Objekt aus MyClass instanziieren und dann den Inhalt an den Konstruktor von MyClass übergeben. wenn ich den Code kompiliert es richtig laufen, aber es zeigt nichts an allenwie auf Parameter eines Konstruktors einer Klasse zugreifen

Bitte lassen Sie mich wissen, wie der Zugriff auf die Parameter an den Konstruktor von MyClass bestanden haben:

MyClass

class MyClass { 
    /** 
    * 
    * @param {Object} 
    * @param {String} param.str any string 
    */ 
    constructor(param) { 
    this.myString = param.str; 

    console.log(this.getMyString() !== null ? 'my string is not null' : 
    'my 
    string is null'); 
    } 

getMyString() { 
return this.myString; 
} 

} 

initializer:

const MyClass = require('./MyClass'); 

class Initializer { 
    constructor() { 
    const myClass = new MyClass('any text'); 
    console.log(myClass.myString);//displays nothing 
    console.log(myClass.getMyString());//displays nothing 
    } 
} 
+0

Nun, Sie auch Ihre 'MyClass' Konstruktor dokumentiert ein Objekt als erstes Argument zu nehmen, also warum übergeben Sie einen String statt? – Bergi

Antwort

2

Sie verwenden greife nicht Konstruktor/Funktionsparameter als Eigenschaften eines Objekts (es sei denn natürlich, Sie in einem Objekt übergeben). Diese Zeile:

this.myString = param.str; 

sucht nach einer str Eigenschaft auf, was den ersten Parameterwert ist. Wenn Sie es anrufen:

const myClass = new MyClass('any text'); 

... Sie übergeben es eine Zeichenfolge. Strings haben keine str Eigenschaft.

Entweder passieren ein Objekt in:

const myClass = new MyClass({str: 'any text'}); 

... und halten param.str, oder Update MyClass mit param zu verwenden, anstatt param.str:

this.myString = param; 
+0

Würden Sie sich bitte meinen aktualisierten Code ansehen? Ich weiß, in ein Problem von "MyClass ist kein Konstruktor" – LetsamrIt

+0

@LetsamrIt: Es ist nicht in Ordnung, Fragen zu bearbeiten, so dass sie vorhandene Antworten ungültig machen. Stack Overflow-Fragen sind keine beweglichen Ziele. Ich habe den Schnitt zurückgesetzt. Wenn Sie "kein Konstruktor" angegeben haben, haben Sie uns (selbst in der Bearbeitung) nicht gezeigt, wie Sie 'MyClass' exportieren, aber basierend auf dem 'require'-Aufruf müssen Sie das folgendermaßen tun:' modul .exports = MyClass; ' –

+0

@LetsamrIt: Auch re edit: Du hast ** beide Seiten ** der Dinge geändert, und so war es immer noch falsch. ** Entweder ** führe ein Objekt mit 'str' in den Konstruktor und benutze' param.str' im Konstruktor, ** oder ** übertrage den String direkt und verwende den ersten Parameter als String. Nicht beide. –

2

Yo Sie übergeben Sie einfach eine string und möchten auf ihre Eigenschaft mit dem Namen str zugreifen, die nicht in der string Art existiert. So gibt es undefined zurück und es wird dem myString zugewiesen. Sie müssen nur this.myString = param

class MyClass { 
 

 
    constructor(param) { 
 
     this.myString = param; 
 
     console.log(this.getMyString() !== null ? 'my string is not null' : 'my string is null'); 
 
    } 
 

 
    getMyString() { 
 
     return this.myString; 
 
    } 
 

 
} 
 

 

 
class Initializer { 
 

 
    constructor() { 
 
     const myClass = new MyClass('any text'); 
 
     console.log(myClass.myString); 
 
     console.log(myClass.getMyString()); 
 
    } 
 
    
 
} 
 

 
const init = new Initializer();

+0

Würden Sie sich bitte meinen aktualisierten Code ansehen? Ich weiß, dass ein Problem mit "MyClass ist kein Konstruktor" aufgetreten ist. – LetsamrIt

2

Beispiel:

class Rectangle { 
 
    constructor(height, width) { 
 
    this.height = height; 
 
    this.width = width; 
 
    } 
 
    // Getter 
 
    get area() { 
 
    return this.calcArea(); 
 
    } 
 
    // Method 
 
    calcArea() { 
 
    return this.height * this.width; 
 
    } 
 
} 
 

 
const square = new Rectangle(10, 10); 
 

 
console.log(square.area); // 100

Verwandte Themen