这是Javascript中的vs类名

这是Javascript中的vs类名,javascript,oop,object,Javascript,Oop,Object,我正在使用其他人的代码片段,我似乎无法理解他何时在使用this以及何时在使用类的名称 在第3行中,他使用了this.pusher,而在$.each函数中,他使用了chat.pusher(当前对象的名称) 我还添加了一个屏幕截图,它清楚地显示了形势的概况 这是因为在$中,每个,这个指的是当前迭代的元素(在这种情况下,这个应该而不是指的是当前的聊天对象。) 在这种情况下,他使用了chat,而不是几个选项(例如使用Function.prototype.bind,或者通用的var\u this=this

我正在使用其他人的代码片段,我似乎无法理解他何时在使用this以及何时在使用类的名称

在第3行中,他使用了this.pusher,而在$.each函数中,他使用了chat.pusher(当前对象的名称)

我还添加了一个屏幕截图,它清楚地显示了形势的概况


这是因为在
$中,每个
这个
指的是当前迭代的元素(在这种情况下,
这个
应该而不是指的是当前的
聊天
对象。)

在这种情况下,他使用了
chat
,而不是几个选项(例如使用
Function.prototype.bind
,或者通用的
var\u this=this

例如:

$.each(['a', 'b'], function(el) {
    console.log(this); // iteration 1: 'a', iteration 2: 'b'
});
另一个例子:

var canInTheHat = {
    someMethod: function() {
        console.log(this); // => catInTheHat

        $.each(['a', 'b'], function() {
            console.log(this); // => iteration 1: 'a', iteration 2: 'b'
        });
    },
    someOtherMethod: function() {
        console.log(this); // => catInTheHat

        $.each(['a', 'b'], function() {
            console.log(this); // => iteration 1: catInTheHat, iteration 2: catInTheHat
        }.bind(this)); // notice the bind
    }
}

如果他在
$中使用
this
。每个
,他都会引用每个聊天频道,但他希望引用聊天实例本身

chat.pusher.subscribe( channel_name );
在函数内部:

$.each( chat.channels , function ( channel_type , channel_name ) {
    chat.pusher.subscribe( channel_name );
        ...
});
在该函数中,
this
关键字并不指向
chat
对象。因此通常您会这样做:

var self = this;
$.each( chat.channels , function ( channel_type , channel_name ) {
    self.pusher.subscribe( channel_name );
        ...
});

但是在这里,
chat
是一个全局的、单一的对象,所以它被用来代替。

这个函数中的
绑定到当前项

他应该这样使用它

$.each( chat.events[ channel_type ] , function ( event_name , callback ) {
    chat.pusher.channels.channels[ channel_name ].bind( event_name , this );
});
而不是使用符号
chat.events[频道类型][事件名称]

现在,在这个函数中使用
chat
是有意义的


顺便说一句,chat
不是类名,而是包含对象的变量的名称,因为它不是函数。

$内部。每个
这个
都指向当前项。
这个
混乱是许多开发人员通过将
这个
存储在
那个
中来启动大多数函数的原因之一r
self
like
var self=this;
ref如果他使用“this”在$.each中,他会引用每个聊天频道,但他想引用聊天实例只是一个不愉快的编码,通常在一个复杂的对象中使用。在
this.pusher=…
的上下文中,this
指的是
chat
对象。而
$中的
this
。每个
循环请参考
频道名称
。使用“chat”或“self”更好吗?谢谢!这里没有区别(除了代码的可读性)。但是如果chat不是一个全局对象,而是一个类(或JavaScript中的函数)相反,您不能使用它,必须创建这样的自变量。我不明白在这种情况下,“this”如何取代chat.events[channel\u type][event\u name]?谢谢!因为它正在迭代chat.events[channel\u type]
并使用键
event\u name
chat.events[channel\u type][event\u name]
这个
$.each( chat.events[ channel_type ] , function ( event_name , callback ) {
    chat.pusher.channels.channels[ channel_name ].bind( event_name , this );
});