我正在使用其他人的代码段,而我似乎无法理解他何时使用此以及他何时使用< strong>班级名称
在第3行,他使用 this.pusher ,而在$ .each函数中,他使用 chat.pusher (当前对象的名称)
connect : function ( )
{
if ( typeof Pusher !== 'undefined' )
{
this.pusher = new Pusher( config.pusher_app_key , { encrypted : true, authEndpoint : '/chat.php' , auth : { params : { hash : app.session.get(), mobile : app.mobile } } } );
$.each( chat.channels , function ( channel_type , channel_name ) {
chat.pusher.subscribe( channel_name );
if ( chat.events[ channel_type ] )
$.each( chat.events[ channel_type ] , function ( event_name , callback ) {
chat.pusher.channels.channels[ channel_name ].bind( event_name , chat.events[ channel_type ][ event_name ] );
});
});
},
我还添加了一个截图,清楚地展示了情况。
答案 0 :(得分:1)
这是因为在$.each
中,this
引用了当前迭代的元素(在这种情况下,this
不引用了当前{{1}对象。)
在这种情况下,他使用了chat
而不是几个选项(例如使用chat
或公共Function.prototype.bind
。
示例:
var _this = this
另一个例子:
$.each(['a', 'b'], function(el) {
console.log(this); // iteration 1: 'a', iteration 2: 'b'
});
答案 1 :(得分:1)
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
是一个全局的,单一的对象,所以它被用来代替。
答案 2 :(得分:1)
$.each
函数中的 this
绑定到当前项。
他应该像这样使用它
$.each( chat.events[ channel_type ] , function ( event_name , callback ) {
chat.pusher.channels.channels[ channel_name ].bind( event_name , this );
});
而不是使用符号chat.events[ channel_type ][ event_name ]
现在在此函数中使用chat
是有意义的。
Btw chat
不是类名,而是包含该对象的变量的名称,因为它不是函数。
答案 3 :(得分:0)
如果他在this
内使用$.each
,他会引用每个聊天频道,但他想引用聊天实例本身。