$(this)在JavaScript模块模式中

$(this)在JavaScript模块模式中,javascript,jquery,module,Javascript,Jquery,Module,我第一次尝试使用Javascript模块模式来组织代码。我理解“this”在这里是如何工作的,但无法理解$(this)是如何工作的。例如,下面的代码, $(this.addClass('video-active')在“chooseVideo”函数中,我只想为单击的元素应用addClass。但它不起作用。谁能给我一些建议吗?谢谢大家! ;(function() { 'use strict'; if (typeof window.jQuery !== 'function') {

我第一次尝试使用Javascript模块模式来组织代码。我理解“this”在这里是如何工作的,但无法理解$(this)是如何工作的。例如,下面的代码, $(this.addClass('video-active')在“chooseVideo”函数中,我只想为单击的元素应用addClass。但它不起作用。谁能给我一些建议吗?谢谢大家!

;(function() {
   'use strict';
   if (typeof window.jQuery !== 'function') {
     return;
   }
   var $ = jQuery;

   var video = {
     init: function() {
       this.cacheDom();
       this.bindEvents();
       this.render();
     },
     cacheDom: function() {
       this.$el = $('#videoWrap');
       this.$button = this.$el.find('.video');
     },
     render: function() {

     },
     bindEvents: function() {
       this.$button.bind('click', this.chooseVideo.bind(this));
     },
     chooseVideo: function(e) {
       e.preventDefault ? e.preventDefault() : e.returnValue = false;
       this.$button.removeClass('video-active');
       $(this).addClass('video-active');
     }
   };

   video.init();

})();

使用bind时,您正在更改

因此,您需要使用事件对象来获取单击的内容

chooseVideo: function(e) {
   e.preventDefault ? e.preventDefault() : e.returnValue = false;
   this.$button.removeClass('video-active');
   $(e.target).addClass('video-active');

使用bind时,您正在更改

因此,您需要使用事件对象来获取单击的内容

chooseVideo: function(e) {
   e.preventDefault ? e.preventDefault() : e.returnValue = false;
   this.$button.removeClass('video-active');
   $(e.target).addClass('video-active');

$(this.addClass('video-active')
不应该起作用。
$(this)
是在jQuery处理程序中包装类似DOM元素的东西的标准方法。@tadman但是
this
不是DOM元素,最好是在它上面调用
addClass
。记住,
这个
在不同的函数之间变化很大。而且你也不知道你在说谁。。。lol
$(this.addClass('video-active')
不应该起作用。
$(this)
是在jQuery处理程序中包装类似DOM元素的东西的标准方法。@tadman但是
this
不是DOM元素,最好是在它上面调用
addClass
。记住,
这个
在不同的函数之间变化很大。而且你也不知道你在说谁。。。谢谢你!我为这个问题挣扎了几个小时!你救了我一天!真的很感激!非常感谢你!我为这个问题挣扎了几个小时!你救了我一天!真的很感激!