由于JavaScript语言设计者Brendan Eich所处的时代(1994年)面向对象编程兴盛,他也受到了影响,JavaScript里面的所有数据类型都是对象,但是他想要的是一个简易的脚本语言不想使其复杂化,因而他没有引入“类”,设计了“继承”机制来将所有对象联系起来。

JavaScript中没有“子类”和“父类”的概念,也没有“类”(class)和“实例”(instance)的区分,全靠一种很奇特的“原型链”(prototype chain)模式来实现继承。

function DOG(name){
	this.name = name;
}
DOG.prototype = { species:'犬科'};

var dogA = new DOG('大毛');
var dogB = new DOG('二毛');

alert(dogA.species);
alert(dogB.species);


显示结果为:

犬科

犬科

由于所有的实例对象共享同一个prototype对象,那么从外界看起来,prototype对象就好像是实例对象的原型,而实例对象则好像"继承"了prototype对象一样。这就是Javascript继承机制的设计思想。

 

摘自:http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.html