这与Javascript中的类名称

时间:2015-07-30 07:41:09

标签: javascript oop object

我正在使用其他人的代码段,而我似乎无法理解他何时使用以及他何时使用< 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 ] );
                });

        });
},

我还添加了一个截图,清楚地展示了情况。

enter image description here

4 个答案:

答案 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,他会引用每个聊天频道,但他想引用聊天实例本身。