关于--面向对象编程-面向对象编程:使用继承避免重复

面向对象编程:使用继承避免重复

有一条原则叫做: Don't Repeat Yourself ,常以缩写形式 DRY 出现,意思是“不要自己重复”。编写重复代码会产生的问题是:任何改变都需要去多个地方修复所有重复的代码。这通常意味着我们需要做更多的工作,会产生更高的出错率。

请观察下面的示例, BirdDog 共享 describe 方法:

Bird.prototype = {
constructor: Bird,
describe: function() {
console.log("My name is " + this.name);
}
};

Dog.prototype = {
constructor: Dog,
describe: function() {
console.log("My name is " + this.name);
}
};

我们可以看到 describe 方法在两个地方重复定义了。根据以上所说的 DRY 原则,我们可以通过创建一个 Animal 超类(或者父类) 来重写这段代码:

function Animal() { };

Animal.prototype = {
constructor: Animal,
describe: function() {
console.log("My name is " + this.name);
}
};

问题是:Animal这个超类,怎么把describe方法继承给 Bird 和 Dog的? 这里只是示意,而没有真正用代码来实现吗?

我已经获得了答案, 在后面几节会提到。不过这种示意式的代码和文字,难免让人产生困扰,对初学者或爱死磕的人来说是极大的伤害幸好在下有过过前几次的经验。
因为FCC是以书面为教学的形式的必定无法在有效篇幅内详尽过多的概念,我提议在类似课程中,建议加入提示如:

“ 实现继承的教学在后面的章节,请先依照本节内容进行练习。 ”

我认为这将极大的提升学习者的使用体验 :smile:

1赞

谢谢。顺便,记得去 MDN 看下文档:

  • inheritance 是和你提到的内容最接近的
  • extends 相对较新,但更简洁,建议了解

感谢回复,这两块内容我稍后再来阅读~