原型链继承

prototype 对象是个模板,要实例化的对象都以这个模板为基础。总而言之,prototype 对象的任何属性和方法都被传递给那个类的所有实例。原型链利用这种功能来实现继承机制

把 ClassB 的 prototype 属性设置成 ClassA 的实例。这很有意思,因为想要 ClassA 的所有属性和方法,但又不想逐个将它们 ClassB 的 prototype 属性。还有比把 ClassA 的实例赋予 prototype 属性更好的方法吗?

function ClassA() {}

  ClassA.prototype.color = "blue";
  ClassA.prototype.sayColor = function () {
     console.log(this.color);
  };

function ClassB() {}

ClassB.prototype = new ClassA();

ClassB.prototype.name = "";
ClassB.prototype.sayName = function () {
    console.log(this.name);
};

var objA = new ClassA();
var objB = new ClassB();

objA.color = "blue";
objB.color = "red";
objB.name = "John";


objA.sayColor();
objB.sayColor();
objB.sayName();

与对象冒充相似,子类的所有属性和方法都必须出现在 prototype 属性被赋值后,因为在它之前赋值的所有方法都会被删除。为什么?因为 prototype 属性被替换成了新对象,添加了新方法的原始对象将被销毁。

未完,待续......
原文地址:https://www.cnblogs.com/zhishiyv/p/14631131.html