javascript - `this` 在 json 回调中是不可见的吗?

标签 javascript scope coffeescript

以下 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.htmlhttp://javascriptweblog.wordpress.com/2010/08/30/understanding-javascripts-this/

关于javascript - `this` 在 json 回调中是不可见的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7888636/

相关文章:

javascript - 向文档动态添加 CSS 规则时等待应用样式

Javascript:MIDI 音序器应用程序中 FAST Timer 的 setTimeOut 替代方案

javascript - 为从 Coffeescript 编译的多个串联的 javascript 文件生成源映射

javascript - CoffeeScript 还是纯 JavaScript?

javascript - 单击链接后选择继续或不继续

javascript - 默认为文件夹中的任何 html 文件

javascript - : javascript vs C vs Python? 中 if block 中变量的范围是多少

javascript - Jasmine 类型错误: Cannot call method 'expect' of null

python - 您可以分配给父函数中定义的变量吗?

backbone.js - 在 CoffeeScript 中,这两种创建主干模型、 View 等的方式有什么区别