我有一组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
实例吗?
答案 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课程。