以下 JS 代码是从 CoffeeScript 生成的等价。
我想将对象添加到 slider 小部件,这些对象的属性来自 Django REST view ,没什么特别的,只是字典列表。
我对 CoffeeScript 和 Django 都很陌生,我不了解this
的可见性。
这里的两个版本中,一个有效,另一个无效。
Slider.prototype.manageObject = function(itemId, colorSequence) {
var obj;
obj = this;
return $.getJSON("http://localhost:8000/api/?item=" + itemId, function(data) {
return obj.managed.push([itemId, data]);
});
};
Slider.prototype.manageObject = function(itemId, colorSequence) {
return $.getJSON("http://localhost:8000/api/?item=" + itemId, function(data) {
return this.managed.push([itemId, data]);
});
};
为什么?
最佳答案
问题是 this
的值取决于上下文。它通常指的是当前对象,在第二种情况下是回调函数。通过分配 obj = this
,您可以在变量 obj
中保留对 Slider
的原始引用,因此调用 managed.push
有效,在第二种情况下,您试图在不存在的回调函数上调用 managed.push
函数。
this
的一个很好的解释:http://www.quirksmode.org/js/this.html和 http://javascriptweblog.wordpress.com/2010/08/30/understanding-javascripts-this/
关于javascript - `this` 在 json 回调中是不可见的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7888636/