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

Usage of this keyword on chain method - JavaScript

我有一个 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)
                ^^^^
}

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

在 javascrpt 中,函数内的关键字 this 绑定到调用时点左侧的任何内容。在您的代码中,重新加载在内部调用重新加载函数。由于它调用它时没有使用 dont 符号,因此 this 将附加到 window.

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

或者您可以使用 .bind

手动指定它指的是什么

我建议你查找 udacity 面向对象 javascript 课程。

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

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

不需要 hasOwnProperty 测试 - 如果有人扰乱您的 Object.prototype 那么 jQuery 就会失败。 jQuery 开发人员做出了一个非常慎重的决定 而不是 在 jQuery 的迭代函数中使用 hasOwnProperty