使用绑定原型更改'this'的范围

时间:2012-07-23 14:07:06

标签: javascript jquery scope this bind

我使用bind来改变'this'的范围,这样我就可以在click函数中使用'this'来引用我的generateContent函数。不幸的是,这意味着this.id不再起作用,因为'this'的范围已经改变。

获取点击按钮的ID的最佳方法是什么,在这种情况下:

function help( doc ) {

    buttons: function() {

        $('.add-btn').click( function() {

        this.generateContent( this.id ) );

        }.bind(this));

    },

    generateContent: function ( id ){

    }

}

// This function binds a function to an object's scope.
Function.prototype.bind = function(scope) {
    var _function = this;
    return function() {
        return _function.apply(scope, arguments);
    }
}

1 个答案:

答案 0 :(得分:5)

你没有标记jQuery,但你的代码嘎嘎叫jQuery,所以我假设jQuery。

jQuery提供event.currentTarget

$('.add-btn').click( function(e) {
     this.generateContent( e.currentTarget.id ) ;
}.bind(this));

Btw Function.prototype.bind本机存在,您不希望在本机版本可用的情况下覆盖它。 jQuery还提供了$.proxy,所以在任何情况下你都不需要它。

See demo