Ich versuche, eine Methode von einem require
d Knotenmodul mit einem spezifischen this
Objekt aufzurufen. Soweit ich sehe, gibt es drei Möglichkeiten, dies zu tun, mit .bind(obj)(args)
, oder mit .call(obj, arg1, ...)
, oder mit .apply(obj, aryArgs)
. Ich verwende derzeit bind
, aber ich habe alle drei mit identischen Ebenen von Nicht-Erfolg versucht. DieseWarum wird mein Objekt gebunden ignoriert?
ist, wo ich den Anruf renne:
var library = require("./library.js");
// ...
requestHandler.bind(library)(req);
requestHandler
ist ein Verweis auf die exportierte status
Funktion aus dieser Datei:
exports.status =() => {
console.log(this);
this.render({text: "status ok"});
};
exports.paramSwitching =() => {
this.render("rendered via param switching");
};
exports.json =() => {
this.render({json: {this: 'renders', as: 'json'}});
};
exports.view =() => {
this.render({view: true, locals: {text: 'hi'}});
};
Ich möchte dies so arbeiten, dass Die status
Funktion wird mit library
als this
Objekt aufgerufen, da render
definiert ist. Allerdings ist die console.log
Anweisung this
als die ausgewerteten Inhalt der Datei zeigt status
halten, das heißt
{ status: [Function],
paramSwitching: [Function],
json: [Function],
view: [Function] }
Was hier passiert, und wie kann ich es beheben? (Oder, wenn ich nicht kann, weil Node etwas komisch macht, gibt es einen Workaround?)
Bitte fügen Sie den Code, der 'requestHandler' definiert, ein, da es keine Referenz auf die' .status'-Methode im Export ist, sondern das gesamte 'exports'-Objekt – Pineda
@Pineda: Es ist bereits enthalten.Lesen Sie die Frage sorgfältig – slebetman
Wie immer, wenn es ein Missverständnis von "this" gibt, werde ich Leser auf meine Antwort auf diese Frage zeigen: http://stackoverflow.com/questions/13441307/how-does-the-this-keyword -javascript-act-in-einem-objekt-literal/13441628? s = 1 | 4.1585 # 13441628 – slebetman