为什么我的CoffeeScript类中的函数不能“看到”其他函数?

时间:2016-06-15 11:14:54

标签: javascript coffeescript

我的foo.coffee看起来像这样:

class window.Foo
  bar: () ->
    baz()
  baz: () ->
    "baz"

在谷歌Chrome控制台中,为什么我会得到以下内容?

f = new Foo
▶ Foo {}
f.baz
"baz"
f.bar
▶ Uncaught ReferenceError: baz is not defined(…)

2 个答案:

答案 0 :(得分:2)

您需要了解类抽象的工作原理。 Foo是一个具有自己范围的函数,因此您可能认为您正在定义存在于同一范围内的内部函数。但你不是。这是(或多或少)实际生成的代码:

var Foo = function Foo() {};
Foo.prototype.bar = function() {
  return baz();
};
Foo.prototype.baz = function() {
  return "baz";
};

所以bar只存在于Foo的原型中。由于new运算符在javascript中的工作方式,Foo的每个实例都获得指向该函数的指针。您可以使用this引用这些原型函数,其中coffeescript缩写为@

class Foo
  bar: () -> 
    @baz()
  baz: () -> 
    'baz'

你可以选择(虽然它没有使用类的意思)说:

class Foo
  bar: () -> 
    Foo.prototype.baz()
  baz: () -> 
    'baz'

答案 1 :(得分:0)

您错过了@ sign - 对此/ self

的引用
class window.Foo
  bar: () ->
    @baz()
  baz: () ->
    "baz"