JS在ES6前的语法上属于无类语言。但在某些场景下又需要使用到继承,于是衍生出多种”继承“方式。 在众多继承方式中较常使用的一种继承方式,以new 关键字new出父级对象并赋予子类对象的原型链上。 但在继承过程中会出现一个问题,因为将父类对象中的所有对象及方法赋予到子类原型上,而原型上的所有数据都是在各个方法中共享。 因此原本在父类中私有的属性变量在此时都变成子类对象中的公有属性对象(存在于prototype原型链上),于是须在子类对象使用call或apply调用一次父类(类似super操作),初始化父类方法以及覆盖当前原型上的方法,直接上例子。 var Person = function(name, age){ this.data = { km : 0, name : name, age : age }; } Person.prototype.run = function( km ){ this.data.km+= km } var Teacher = function(name, age, pro){ Person.apply(this,arguments);//如果不加入这段代码,