Javascript 如何正确使用socket.io和oop
我喜欢node.js和socket.io,因为它们强大而漂亮,但这个小问题阻碍了我的开发。这可能是因为我对node.js和javascript没有足够的实践 问题是: 有一个代码:Javascript 如何正确使用socket.io和oop,javascript,node.js,oop,socket.io,Javascript,Node.js,Oop,Socket.io,我喜欢node.js和socket.io,因为它们强大而漂亮,但这个小问题阻碍了我的开发。这可能是因为我对node.js和javascript没有足够的实践 问题是: 有一个代码: var express = require('express'); var sio = require('socket.io'); var X = require('./js/x.js'); var Y = require('./js/Y.js'); var app = express.createServer()
var express = require('express');
var sio = require('socket.io');
var X = require('./js/x.js');
var Y = require('./js/Y.js');
var app = express.createServer();
var ws = sio.listen(app);
var users = [];
app.use(express.static(__dirname + '/public'));
ws.sockets.on('connection', function(socket) {
users.push(new X(socket));
if (users.length === 2) {
var z = new Y(users.shift(), users.shift());
z.listen();
}
});
app.listen(9000);
这里是X和Y:
module.exports = function X(socket) {
this.socket = socket;
this.name = '';
X.prototype.setName = function(name) {
this.name = name;
};
};
module.exports = function Y(a, b) {
this.a1 = a;
this.a2 = b;
this.variable1 = 777;
Y.prototype.listen = function() {
this.a1.socket.on('text', function(msg) {
console.log('a1: ' + msg);
// AND HERE IS MY ISSUE:
// I want to access a2 by 'this' but 'this' doesn't point on 'class' Y
this.a2.socket.emit('text', 'a1: ' + msg);
// Also i want to change value of variable, something like that:
this.a1.setName(msg);
// AND:
this.variable1--;
});
};
我的问题是:我怎么做错了,我做错了什么。我是PHP开发人员,我意识到我的想法有所不同。提前谢谢 由于您的回调函数不是Y的方法
,因此此
不会引用Y
Javascript是一种有趣的语言,这是乐趣的一部分()
您可以通过执行以下操作来解决此问题:
Y.prototype.listen = function() {
var that = this;
this.a1.socket.on('text', function(msg) {
console.log('a1: ' + msg);
that.a2.socket.emit('text', 'a1: ' + msg);
that.a1.setName(msg);
that.variable1--;
});
}
请看我从刚才引用的博客文章中复制的示例:
它返回五,因为count在闭包函数中作为外部变量引用。但是如果在增量闭包内的计数之前添加这个。
,结果将是四。这与您的This
不引用Y的原因完全相同