原型的实现
// 父类构造函数
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)
现在在控制台打印实例试试吧!
用图来描述久见下图: