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文件。欣赏完整性。也许你不介意也看看这个?冠军回答。欣赏完整性。也许你不介意也看看这个?