JS方法绑定2个不同的这个

时间:2015-01-28 13:58:36

标签: javascript jquery oop

我有这个小代码:

ScenesController.prototype.viewAction = function() {
    this.flash = this.di.HelperFlash.hasSupport();

    this.$playerElem = !this.flash? $('#html_player') : $('#flash_player');
// the first click is just a sample, I need the same object in the Quailty Change method
    $('.scenes_view_video_quailty').on('click', function() { echo($(this));});
    $('.scenes_view_video_quailty').on('click', this.viewVideoQuailtyChange.bind(this));

};
ScenesController.prototype.viewVideoQuailtyChange = function(e) {
    e.preventDefault();
    if (!this.flash) {
        echo(this);
        echo($(this));
    }
};

当我点击链接时,我需要将此变量传递给QualityChange方法。一个是对象(在绑定中),另一个是click事件,因为我也需要单击的元素。

我正在尝试使用.on('点击',{$ this:$(this)},this.method)解决方案,但是选择了工作,evend.data。$这看起来是另一个不同的对象。

我需要与第一次单击方法中相同的对象。 (echo = console.log)

2 个答案:

答案 0 :(得分:3)

将引用当前实例的this别名(传统上为self)并使用this来引用所单击的元素

ScenesController.prototype.viewAction = function() {
    var self = this;
    this.flash = this.di.HelperFlash.hasSupport();

    this.$playerElem = !this.flash? $('#html_player') : $('#flash_player');

    $('.scenes_view_video_quailty').on('click', function() { echo(self, $(this));});    
};

要调用方法设置this引用,您可以使用Function.apply,例如:

$('.scenes_view_video_quailty').on('click', function(){
         self.viewVideoQuailtyChange.apply(self, [$(this)])
});

答案 1 :(得分:0)

您可以使用bind附加任意数量的变量 你可以有一个合适的方法,如:

ScenesController.prototype.viewVideoQuailtyChange = function(secondThis) {
}

然后使用bind作为:

this.viewVideoQuailtyChange.bind(this, $(this));

使用此解决方案,您确实会丢失事件,因此可能需要更多考虑。我将调查并更新答案:)