在ES6之前并没有提供extends继承,我们可以通过构造函数+原型对象模拟实现继承,被称为组合继承。
核心原理:通过call()把父类型的this指向子类型的this,这样就可以实现子类型继承父类型的属性。
// 借用父构造函数继承属性
function Father(name, age) {
// this指向父构造函数对象的实例
this.name = name
this.age = age
}
function Son(name, age) {
// this指向子构造函数对象的实例
Father.call(this, name, age)
}
var son = new Son(‘张三‘, 18)
console.log(son) // Son {name: "张三", age: 18}
我们通过Father.call(this, name, age)传入Son中的this使Father的this指向改变成son。这样就不需要再在Son中写父类已经拥有的属性了。
而且如果子类还需要有自定义的属性,可以单独定义
function Son(name, age, score) {
// this指向子构造函数对象的实例
Father.call(this, name, age)
this.score = score
}
var son = new Son(‘张三‘, 18, 100)
console.log(son) // Son {name: "张三", age: 18, score: 100}
当需要继承父类的方法时:
Father.prototype.money = function() {
console.log(‘我要赚钱‘)
}
Son.prototype.exam = function() {
console.log(‘我要考试‘)
}
Son.prototype = new Father()
Son.prototype.constructor = Son
一定要记得改回construcotr指向!!!
原文地址:https://www.cnblogs.com/perse/p/12040426.html
时间: 2024-10-10 07:56:33