2016-11-15 3 views
2

Ich versuche socket.io auf mein Eigentum zu teilen, nicht sicher, warum es nicht funktioniert ...Prototypmuster neue Eigenschaft erstellen

Meine erste Datei, MessageController.js:

function MessageController() { 
}; 

MessageController.prototype.io = ""; 

MessageController.prototype.sendMessageAction = function (req, res) { 
    console.log(this.io); 

} 

module.exports = new MessageController(); 

In einer anderen Datei router.js Ich habe dies wie:

var messageController = require('./controllers/MessageController'); 


module.exports = function (expressApp, router, io) { 
    console.log(io); 

    messageController.io = io; 

    router.post('/dashboard/message', messageController.sendMessageAction); 

    return router; 
}; 

Hier ist, wie ich benötige router.js:

Und wenn ich rufe this.io Eigenschaft zurückgibt undefined jemand weiß, was ist das Problem?

+0

es sieht aus wie Sie es zu undefinierten in router.js try Einstellung könnte: module.exports = function (expressApp, Router, io) { console.log (io); // undefined .... }; –

+0

Es ist nicht definiert weil, ich ersetzt 'io' mit string aber das gleiche Ergebnis ... – Vladimir

+0

Sie ersetzten es vor der Einstellung in router.js haben Sie versuchen, es zu protokollieren, wie ich vorgeschlagen? –

Antwort

1

Das Problem hier ist ein Missverständnis, wie Scope in JavaScript funktioniert. Wenn die routermessageController.sendMessageAction ruft, verwendet es eine Bindung an es. z:

callback(res, req, next) 

In diesem Fall der aktuelle Bereich ist nichtmessageController. So bezieht sich this nicht auf messageController. Wenn Sie wollen this zu gebunden zu messageController müssen Sie bindensendMessageAction zu ihm.

// Using Function#bind 
router.post(
    '/dashboard/message', 
    messageController.sendMessageAction.bind(messageController) 
) 

// Using a closure 
router.post(
    '/dashboard/message', 
    (req, res) => messageController.sendMessageAction(req, res) 
) 
+0

Also wer ist "das" hier? Router? weil die Methode für ihn entwickelt wurde? –

Verwandte Themen