原型的实现
// 父类构造函数
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)
现在在控制台打印实例试试吧!
用图来描述久见下图:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。