だから私はコーヒースクリプトにかなり慣れていないので、新しい仕事のためにかなり早くそれを学ばなければなりません. 次のコードの違いは何ですか:
class Person
対
class @Person
次を使用する場合
bob = new Person()
結果はどのように異なりますか?
だから私はコーヒースクリプトにかなり慣れていないので、新しい仕事のためにかなり早くそれを学ばなければなりません. 次のコードの違いは何ですか:
class Person
対
class @Person
次を使用する場合
bob = new Person()
結果はどのように異なりますか?
class C
が生成する完全な JavaScriptを見ればclass @C
、物事はより明確になるはずです。class C
になります(いくつかのクリーンアップを含む):
(function() {
var C = (function() {
function C() {}
return C;
})();
}).call(this);
したがって、C
「クラス」は実際には、自己呼び出し関数 (SIF) ラッパー内のローカル変数です。このラッパーは、CoffeeScript がスコープを処理する方法の一部です。
このドキュメントではわかりやすくするために省略していますが、CoffeeScript のすべての出力は無名関数でラップされています。
(function(){ ... })();
このセーフティ ラッパーは、キーワードの自動生成と組み合わせるvar
ことで、グローバル名前空間を誤って汚染することを非常に困難にします。
を見るとclass @C
、ほぼ同じことがわかります。
(function() {
this.C = (function() {
function C() {}
return C;
})();
}).call(this);
違いは、var C
(ローカル変数) とthis.C
(何であれプロパティthis
) です。
this
では、SIF の中には何が入っているのでしょうか? this
内側は外側にあるものになります:
(function() { ... }).call(this)
// -----------------------^^^^
call
SIF を呼び出すために使用されるためです。this
SIF の外には何がありますか? ブラウザーでは、window
とclass @C
同等でclass window.C
あり、のプロパティwindow
はグローバルに表示されます。したがって、ブラウザ環境でグローバルに表示されますが、単純なclass @C
ものは、それが定義されているファイルでのみ表示されます。C
class C
より一般的なアプローチ (少なくとも私が使用したコードでは) は、グローバルに表示されるアプリケーション固有の名前空間を持つことです。
// Somewhere before anything else happens...
window.whatever_the_app_is_called = { };
次に、その名前空間のどこかにクラスを配置します。
class whatever_the_app_is_called.C
#...
Require.js または node.js を使用している場合は、使用する独自の名前空間パターンがあります。
@
はthis
そうです...class @Person
にコンパイルされますthis.Person =
コンパイルされた JS がどのように見えるかは、coffeescript.org/#tryで確認できます。