1

原型的实现

// 父类构造函数

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)

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

用图来描述久见下图:
js继承详解图.jpg


chidaozhi
60 声望4 粉丝

前端老阿姨