在回调中访问对象变量

时间:2012-06-14 14:53:33

标签: javascript callback scope

我有以下设计

function crudDataTable()
{
    this.addEditFormContainerSelector = ''; 
    this.paginationType = "full_numbers";  // Provide Pagination Type
    this.processing = true; 
    this.serverSide = true;  //I want this this to be accessible in fnRowCallback below:

    this.create = function(){

        this.tableInstance = $(this.tableLocationSelector).DataTable({
            "sPaginationType": this.paginationType
            fnRowCallback:function(nRow, aData) {
                // "this" from crudDataTable should be accessible here
            }  
        })
    }
}

我希望this中可以访问crudDataTable中的 fnRowCallback

我怎样才能实现这一点?fnRowCallback组件也会触发datatable,所以这不在我的掌控之中。如何在this下访问 fnRowCallback

或者如果这是不可能的,那么实现它的其他方法是什么?

我正在尝试编写一个组件,这些组件的用户可以简单地设置其变量并调用create函数。我正面临着在this函数中访问 fnRowCallback 的挑战。

感谢。

1 个答案:

答案 0 :(得分:2)

您可以在回调之外存储对this的引用:

var table = this;
this.tableInstance = $(this.tableLocationSelector).DataTable({
     "sPaginationType": this.paginationType,
     fnRowCallback: function(nRow, aData) {
         //Use `table` to refer to the instance of `crudDataTable`
     }  
});

或者,您可以使用ES5 bind method(但请注意旧浏览器不支持它):

this.tableInstance = $(this.tableLocationSelector).DataTable({
     "sPaginationType": this.paginationType,
     fnRowCallback: function(nRow, aData) {
         //Use `this` to refer to the instance of `crudDataTable`
     }.bind(this);
});