原型的实现
// 父类构造函数function SuperClass(id) {this.name = 'supername'this.arr = [1, 2, 3, 4, 5]this.id = id}// 子类构造函数function SubClass(id, name) {SuperClass.call(this, id)this.name = name // 子类自己的属性} /\*\*\* 传入一个对象obj,能返回一个新对象,该对象有个属性prototype值是obj\* @param {testobj} obj\*/function inheritObject(obj) {var F = function () { }F.prototype = objreturn new F()} /\*\*\* 构建一原型链,实现继承\* @param {子类} subClass\* @param {父类} superClass\*/function inheritPrototype(subClass, superClass) {subClass.prototype = inheritObject(superClass.prototype)// 这里将父类的原型对象传给inheritObject,得到一个对象,该对象有个属性prototype值是父类的原型对象// {// prototype: {// 我是父类的原型对象// }// }// 这样就形成了子类 -> 父类的原型链subClass.prototype.constructor = subClass // 正常子类的原型中有构造器constructor,指向的是该子类构造函数,而现在由于上一步的操作指向不明,所以这步将constructor重新指向子类构造函数}inheritPrototype(SubClass, SuperClass) var instance1 = new SubClass(8)
现在在控制台打印实例试试吧!
用图来描述久见下图: