JavaScript";这";嵌套函数中的指针

JavaScript";这";嵌套函数中的指针,javascript,function,pointers,this,Javascript,Function,Pointers,This,下面是一些不起作用的JavaScript代码: function clientEventsManager(io) { this.connectedClients = 0; this.createEventReceivers = function(io) { io.sockets.on('connection', function(socket) { this.connectedClients++;

下面是一些不起作用的JavaScript代码:

function clientEventsManager(io) {
    this.connectedClients = 0;

    this.createEventReceivers = function(io) {
        io.sockets.on('connection', function(socket) {
                this.connectedClients++;
                //does not increase "connectedClients" of "clientEventsManager" function
        }
    }

    createEventReceivers(io); //it is the only call to createEventReceivers()
}



var Manager = new clientEventsManager(io); //it is the only instanciation of clientEventsManager
我的问题是:
是否有方法更改clientEventsManager.createEventReceivers()中的clientEventsManager.ConnectedClient


编辑:这篇文章是重复的,谢谢你的回答

快速而肮脏的解决方案

function base(param) {
    this.attr1 = "azertyuiop";
    this.attr2 = 123;
    this.attr3 = param;
    var self=this;
    this.fct1 = function() {
        console.log("azerty keyboard first row: "+self.attr1);
        //Doesn't work
    }
}

您应该能够很好地:。您如何调用
fct1
方法?代码有点“混乱”,因为
base
没有大写(表示构造函数)。你只是在调用
base
,还是在构造一个新的
base
并调用该实例的
fct1
方法??“有没有办法在
base.fct1
函数中获得基函数的
attr1
属性?”是的,很多(可能是4)。了解此的工作原理:感谢您的更新。我已经假设它将是的一个副本(尽管不能再投票了),我想知道为什么您将
createEventReceivers
函数直接放在构造函数中的对象上,而不是放在
clientventmanager.prototype
上。我这样做是因为管理器只实例化一次。知道了这一点,我认为直接把它放在构造函数中更好地阅读和折叠代码。。。我这样做错了吗?为什么?它解决了什么问题?@user3753446:您可能无法做到这一点,但您当然可以澄清您的问题并提供一个完整的示例。@amenadiel:我说过要了解这个,它与变量范围无关。如果想使用
这个
,他们应该知道它是如何工作的,不是吗?
这个
是每个函数中隐式定义的局部“变量”,就像
参数一样。当然,
这个
有作用域,每个函数都是局部的,但我认为,
这个
出现的“问题”实际上与作用域没有任何关系。关于
这个
的作用域,您只需要知道同名的内部变量会影响外部变量。@amenadiel:然后您就可以投票以与外部变量重复的形式关闭