Ich bin ein Neuling zu nodejs. Ich schreibe eine Hilfsfunktion zum Erstellen von JSON mit einem Schema, ich versuche, Funktionen (meist Setter) hinzuzufügen, um Werte festzulegen. Das Folgende ist eine einfache Version davon.Hinzufügen von Funktionen dynamisch zu function.prototype
function Task() {
this.action = {};
this.schedule = {};
}
function capitalize(str) {
return `${str[0].toUpperCase()}${str.slice(1)}`;
}
const scheduleProps = [
'startAt',
'repeatEvery',
'endAt',
'count',
'interval'
];
hinzufügen Methoden dynamisch
for(var i=0; i<scheduleProps.length; i++) {
Object.defineProperty(Task.prototype, `set${capitalize(scheduleProps[i])}`, {
enumerable: true,
configurable: false,
writable: true,
value: (value) => {
this.schedule[scheduleProps[i]] = value;
}
});
}
Wenn ich die folgende Art und Weise nenne ich obj.schedule.repeatEvery erwarten Wert enthalten 10.
obj = new Task();
obj.setRepeatEvery(10);
Stattdessen bekomme ich
TypeError: Cannot set property 'repeatEvery' of undefined
Ich habe sogar versucht zu setzen die Funktionen wie so
Task.prototype[`set${capitalize(scheduleProps[i])}`] = (val) => {
this.schedule[scheduleProps[i]] = val;
}
In diesem Fall bekomme ich
TypeError: Cannot set property 'interval' of undefined
at Task.(anonymous function) [as setRepeatEvery]
Wie kann ich Methoden auf eine Function.prototype dynamisch gesetzt? Vielen Dank für Ihre Hilfe
Wo ist der Schleifendurchlauf? Lambda (Pfeil) -Funktionen haben nicht den richtigen 'this'-Bereich, wenn diese Schleife nicht in einer Member-Methode ausgeführt wird. versuchen Sie es mit einer normalen 'Funktion' –
Awesome Balázs !! Ich musste es in den Konstruktor verschieben und es funktionierte. Ich muss sie als Lambda-Funktion haben, um die Funktionen auf den Hauptfunktionsprototyp zu setzen –
JSON ist ein Datenaustauschformat, wie XML oder YAML. In Ihrem Beispiel wird kein JSON angezeigt. JavaScript-Objekte sind nicht JSON. –