在链方法上使用此关键字 - 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
。
我有一个 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
。