CSコードを取得して、CoffeeScriptのサイト(http://coffeescript.org/)のサイドバイサイドエディターに配置すると、それが「クラス」data
のプロトタイプにあることがわかります。Parent
そのプロトタイプは、作成する新しい関数(クラス)のテンプレートであると考えてください。そのプロトタイプには、他の関数が含まれているか、すべてのインスタンスで使用可能な変数(OO静的変数など)が含まれています。
name
「静的」変数に追加していますdata
。その後、から「派生」するすべてのインスタンスで使用できるようになりますParent
。
そこで行われている内部の仕組みはわかりませんが、OOの世界から来ているので、それを解釈します。これがお役に立てば幸いです。
COFFEESCRIPTのサイトを介して生成されたコード
var Child, Daughter, Parent, Son,
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
Parent = (function() {
function Parent() {}
Parent.prototype.data = {};
return Parent;
})();
Child = (function(_super) {
__extends(Child, _super);
function Child() {
return Child.__super__.constructor.apply(this, arguments);
}
Child.prototype.age = 10;
return Child;
})(Parent);
Son = new Child;
Son.data.name = "John Doe";
Daughter = new Child;
alert(Daughter.data.name);
更新
CSサイドバイサイドウィンドウにリンク機能があることに気づきました。サイドバイサイドコードへのリンクは次のとおりです。
更新#2
コメントでのあなたの質問に答えて、私はあなたが何をしたいのか正確にはわかりませんが、あなたはこのようなことをすることができます:
class Parent
#data: {}
class Child extends Parent
constructor: (@name) ->
age: 10
sayHi: -> alert "Hi " + @name
Son = new Child "John Doe"
Daughter = new Child "Sarah Jane"
Son.sayHi()
Daughter.sayHi()
おそらく、name
変数(または変数全体data
)を親レベルに保持し、コンストラクターを介して設定し、親関数を介してアクセスします。