这是Javascript中的vs类名
我正在使用其他人的代码片段,我似乎无法理解他何时在使用this以及何时在使用类的名称 在第3行中,他使用了this.pusher,而在$.each函数中,他使用了chat.pusher(当前对象的名称) 我还添加了一个屏幕截图,它清楚地显示了形势的概况这是Javascript中的vs类名,javascript,oop,object,Javascript,Oop,Object,我正在使用其他人的代码片段,我似乎无法理解他何时在使用this以及何时在使用类的名称 在第3行中,他使用了this.pusher,而在$.each函数中,他使用了chat.pusher(当前对象的名称) 我还添加了一个屏幕截图,它清楚地显示了形势的概况 这是因为在$中,每个,这个指的是当前迭代的元素(在这种情况下,这个应该而不是指的是当前的聊天对象。) 在这种情况下,他使用了chat,而不是几个选项(例如使用Function.prototype.bind,或者通用的var\u this=this
这是因为在
$中,每个,这个指的是当前迭代的元素(在这种情况下,这个应该而不是指的是当前的聊天对象。)
在这种情况下,他使用了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
不是类名,而是包含对象的变量的名称,因为它不是函数。在$内部。每个,这个都指向当前项。这个混乱是许多开发人员通过将这个存储在那个中来启动大多数函数的原因之一rself
likevar 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 );
});