だから私はコーヒースクリプトにかなり慣れていないので、新しい仕事のためにかなり早くそれを学ばなければなりません. 次のコードの違いは何ですか:
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)
// -----------------------^^^^
callSIF を呼び出すために使用されるためです。thisSIF の外には何がありますか? ブラウザーでは、windowとclass @C同等でclass window.Cあり、のプロパティwindowはグローバルに表示されます。したがって、ブラウザ環境でグローバルに表示されますが、単純なclass @Cものは、それが定義されているファイルでのみ表示されます。Cclass 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で確認できます。