Javascript 为什么可以';t我的CoffeeScript类中的函数';见';其他的?

Javascript 为什么可以';t我的CoffeeScript类中的函数';见';其他的?,javascript,coffeescript,Javascript,Coffeescript,我的foo.coffee看起来像这样: class window.Foo bar: () -> baz() baz: () -> "baz" 在Google Chrome控制台中,为什么我会得到以下信息 f = new Foo ▶ Foo {} f.baz "baz" f.bar ▶ Uncaught ReferenceError: baz is not defined(…) 您缺少对该/自我的@符号-引用 class window.Foo bar:

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

class window.Foo
  bar: () ->
    baz()
  baz: () ->
    "baz"
在Google Chrome控制台中,为什么我会得到以下信息

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

您缺少对该/自我的@符号-引用

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

您缺少对该/自我的@符号-引用

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

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

var Foo = function Foo() {};
Foo.prototype.bar = function() {
  return baz();
};
Foo.prototype.baz = function() {
  return "baz";
};
所以bar只存在于Foo的原型上。由于
new
操作符在javascript中的工作方式,Foo的每个实例都会得到一个指向该函数的指针。您可以使用
this
引用这些原型函数,在coffeescript中,this缩写为
@

class Foo
  bar: () -> 
    @baz()
  baz: () -> 
    'baz'
您也可以这样说(尽管这不符合使用类的目的):


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

var Foo = function Foo() {};
Foo.prototype.bar = function() {
  return baz();
};
Foo.prototype.baz = function() {
  return "baz";
};
所以bar只存在于Foo的原型上。由于
new
操作符在javascript中的工作方式,Foo的每个实例都会得到一个指向该函数的指针。您可以使用
this
引用这些原型函数,在coffeescript中,this缩写为
@

class Foo
  bar: () -> 
    @baz()
  baz: () -> 
    'baz'
您也可以这样说(尽管这不符合使用类的目的):


你看过js的输出了吗?不知道这意味着什么sorrycoffeescript编译成javascript。无论是即时的还是预先的,这都是正确的。在该目录中键入
coffee-c nameofjsfile
,以生成输出javascript文件。是否查看了输出js?不确定这意味着sorrycoffeescript编译为javascript。无论是即时的还是预先的,这都是正确的。从该目录中键入
coffee-c nameofjsfile
,以生成输出javascript文件。欣赏完整性。也许你不介意也看看这个?冠军回答。欣赏完整性。也许你不介意也看看这个?