在链方法上使用此关键字 - JavaScript

时间:2015-07-01 06:49:03

标签: javascript jquery ajax datatables

我有一组DataTable个对象:

var scheme_tables = {
    length: 3,
    remittance-penalty-scheme: DataTable.Api._Api[0],
    reporting-penalty-scheme: DataTable.Api._Api[0],
    service-fee-scheme: DataTable.Api._Api[0],
    __proto__: Array[0]
}

我正在对每个ajax重新加载每个表执行回调:

for(key in scheme_tables) {             
    scheme_tables[key].ajax.reload(reloader)
                                   ^^^^^^^^
}

reloader函数中,我有一个this关键字:

var reloader = function() {
    console.log(this)
                ^^^^
}

this函数中的reloader()关键字是否会引用.ajax属性或scheme_tables[key]对象?因为当我执行console.log(this)时,我会收到一个Window对象 - 它应该引用DataTable实例吗?

2 个答案:

答案 0 :(得分:1)

您应该使用.bind创建对绑定到所需上下文的reloader函数的引用:

for (key in scheme_tables) {
    var t = scheme_tables[key];                    
    t.ajax.reload(reloader.bind(t));
}

没有必要进行hasOwnProperty测试 - 如果有人弄乱你的Object.prototype那么jQuery就会失败。 jQuery开发人员在jQuery的迭代函数中做了一个非常慎重的决定 not 来使用hasOwnProperty

答案 1 :(得分:0)

在javascrpt中,函数内的关键字this绑定到调用时点的任何内容。在您的代码重新加载内部调用重新加载器函数。并且因为它没有用符号表示它,this将附加到窗口。

无论在何处以及如何定义函数,这个词总是在执行时被定义。

或者您可以使用.bind

手动指定这将引用的内容

我会敦促你查找udacity面向对象的javascript课程。