如果您将您的 CS 代码放入 CoffeeScript 网站 (http://coffeescript.org/) 的并排编辑器中,您会看到它data
位于Parent
“类”的原型上。将该原型视为您创建的新功能(类)的模板。该原型要么包含其他函数,要么包含可用于所有实例的变量(如 OO 静态变量)。
您正在添加name
一个“静态”变量data
。然后它将可供所有“派生”自Parent
.
我不确定那里的内部运作,但来自一个面向对象的世界,这就是我解释它的方式。我希望这有帮助。
通过 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
变量)保留在父级别并通过构造函数设置它并通过父函数访问它。