乐趣区

js关于原型继承和原型链

原型的实现

// 父类构造函数

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 = obj

return 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)

现在在控制台打印实例试试吧!

用图来描述久见下图:

退出移动版