gpt4 book ai didi

javascript - 为什么我的 CoffeeScript 类 'see' 中的函数不能是其他函数?

转载 作者:行者123 更新时间:2023-12-02 14:30:57 25 4
gpt4 key购买 nike

我的 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(…)

最佳答案

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

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

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

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

您也可以(尽管它破坏了使用类的意义)说:

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

关于javascript - 为什么我的 CoffeeScript 类 'see' 中的函数不能是其他函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37833867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com