2016-05-27 68 views
1

Ich erstellte Modellskript in JS, also kann ich ein Objekt übergeben und einige Logik und Werte hinzufügen. Ich benutze get/set, um die Werte zu erzeugen, aber wenn ich meinen Code starte, wird ein RangeError ausgelöst: Maximale Call-Stack-Größe überschritten. Weiß jemand, wer diesen Fehler beheben soll? RangeError: Maximale Call-Stack-Größe für Node.js überschritten

var model = { 
    get id() { 
     return this.id ; 
    }, 
    set id(id) { 
     this.id = id || ''; 
    }, 
    get filename(){ 
     return this.filename ; 
    }, 
    set filename(name){ 
     this.filename = name || ''; 
    }, 
    get savename(){ 
     return this.savename ; 
    }, 
    set savename(name){ 
     this.savename = name || ''; 
    }, 
    get filetype(){ 
     return this.filetype ; 
    }, 
    set filetype(name){ 
     this.filetype = name || ''; 
    } 
}; 

module.exports = function(parm){ 
    model.id = parm.id ; 
    model.filename = parm.filename ; 
    model.savename = parm.savename ; 
    modle.filetype = parm.filetype; 
    return model ; 
}; 

Antwort

1
get id() { 
    return this.id ; 
}, 

Sie haben einen Getter für die Eigenschaft definiert "id" bezeichnet. Ihre Implementierung des Getters besagt, dass sie den Wert der Eigenschaft "id" vom Objekt zurückgeben soll.

Um den Wert der Eigenschaft "id" zu erhalten, prüft das System zuerst, ob es einen Getter für diese Eigenschaft gibt. In diesem Fall gibt es, so dass der Getter aufgerufen wird.

Das gleiche gilt für den Setter.

Sie müssen die tatsächlichen Eigenschaftswerte an einem anderen Ort als den Werten der Objekteigenschaft beibehalten, sonst werden Sie genau auf das Problem stoßen, das Sie haben.

get id() { 
    return this._id; 
}, 
set id(value) { 
    this._id = value || ""; 
}, 

Sie müssen es nicht genau so machen; Es ist nur ein Weg, der funktioniert.

+0

Danke, der Fehler war irreführend. Ich nehme an, weil krank sowohl die get/set als auch die vars haben, ist dies vielleicht nicht der optimale Weg, um das zu erreichen, was ich will. – John