Coffeescript代码:
class Animal
constructor: (@name) ->
move: (meters) ->
alert @name + " moved #{meters}m."
class Snake extends Animal
move: ->
alert "Slithering..."
super 5
alert Snake instanceof Animal
这是a link。
我真的认为这个结果是真的。
我的理由是编译JavaScript中的这个__extends
方法:
__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;
};
child.prototype.prototype
是父母。
有人可以告诉我为什么吗? 我知道以下是真的:
alert new Snake('a') instanceof Animal
答案 0 :(得分:6)
您的Snake
是Animal
的子类:
class Snake extends Animal
这意味着Snake
("类")实际上是Function
的实例,而不是Animal
。另一方面,Snake
对象将是Animal
的实例:
alert Snake instanceof Function # true
alert (new Snake) instanceof Animal # true
如果您尝试移动Snake
实例:
(new Snake('Pancakes')).move()
您会看到正确的方法被调用。