新手问题 CoffeeScript:关于 class 中的 constructor《深入浅出 CoffeeScript》p56

douya0808 · 2013年05月06日 · 最后由 krazy 回复于 2013年05月07日 · 3605 次阅读

p56 页写有一句话 "默认情况下,类的属性 (除了 constructor) 都会附加到原型上"

然后 p57 有一段关于 extends 的示例程序

class Pet
   constructor:->@isHungry=true
   eat:->@isHungry=false

class Dog extends Pet

dog=new Dog
console.log (Dog)

然后书上又说"Dog 继承了 Pet 的构造函数"

我的问题是,extends 本身就是原型继承,那如果 Pet 自己的原型中本身就没有 constructor,那 Dog 又是从哪继承来的构造函数呢? 然后我运行以上代码,输出的是{ isHungry: true },疑?还真继承了?那就是说 Pet 的原型中有 constructor?那岂不是和 p56 说的自相矛盾么?

请大哥们指点小弟

任何类都总是有 constructor 方法,所以当继承时,子类与父类分别都有一个 constructor 方法,当然 new( 实体化时) 运行的是两个不同的 构造方法,但子类会完全继承父类的其它方法,执行方法时运行的是相同的方法,除非你在子类覆写此方法

子类的 contructor 中直接调用其父类的构造函数

需要 登录 后方可回复, 如果你还没有账号请 注册新账号