关键是把 ClassB 的 prototype 属性设置成 ClassA 的实例。
function ClassB(color){ this.color = color; this.sayColor = function(){ console.log(this.color); } } function ClassA(name){ this.name = name; this.sayName = function(){ console.log(this.name) } }
//这一句,就让A继承了B的所有属性和方法 ClassA.prototype = new ClassB(); var oA = new ClassA(); oA.color = "red"; oA.sayColor();
这里面的关系是这样的:
实例出来的A,可以继承ClassA.prototype这个对象里面的所有属性和方法
而现在ClassA.prototype指向了ClassB的实例
所以:实例出来的A,就可以有ClassB的实例的所有方法的属性。
而ClassB的实例,又可以有ClassB.prototype的所有属性和方法,
所以:实例出来的A,也可以有ClassB.prototype的所有属性和方法
就像链条一样连接起来,所以叫原型链。
原本:
经过 ClassA.prototype = new ClassB();