js之原型链继承
方式1:原型链继承
套路:
- 定义父类型构造函数
- 给父类型的原型添加方法
- 定义子类型的构造函数
- 创建父类型的对象赋值给子类型的原型
- 将子类型原型的构造属性设置为子类型
- 给子类型原型添加方法
- 创建子类型的方法,可以调用父类型的方法
关键:子类型的原型为父类型的一个实例对象
function Supper () {
this.subProp = 'Supper property'
}
Supper.prototype.showSupper = function () {
console.log(this.subProp)
}
function Sub () {
this.subProp = 'Sub property'
}
// 子类型的原型为父类型的一个实例对象
Sub.prototype = new Supper()
// 让子类型的原型的constructor指向子类型
Sub.prototype.constructor = Sub
Sub.prototype.showSub = function () {
console.log(this.subProp)
}
var sub = new Sub()
sub.showSupper() // 能调用的原因是Sub.prototype = new Supper()
sub.toString() // 找方法:现在本身找===>再到原型上找 能够找到的原因是 Sub.prototype = new Object()
方式2:借助构造函数继承(假的)
套路:
1.定义父类型构造函数
2.定义子类型构造函数
3.在子类型构造函数中调用父类型构造函数
关键:在子类型构造函数中通过super调用父类型的构造函数
function Person (name, age) {
this.name: name
this.age = age
}
function Student (name, age, sex) {
Person.call(this, name, age) // 相当于this.Person(name. age)
// this.name: name
// this.age = age
this.sex = sex
}
var s = new Student('gyf', 12, ‘nan’)
console.log(s.name, s.age, s.sex)
方法3:原型链+借用构造函数的组合继承方式
1.利用原型链实现对父类型对象的方法的继承
2.利用super()借用父类型的构造函数初始化相同的属性
function Person (name, age) {
this.name: name
this.age = age
}
Person.prototype.setName = function (name) {
this.name = name
}
function Student (name, age, sex) {
Person.call(this, name, age)
this.sex = sex
}
Student .prototype.setName = function (sex) {
this.sex= sex
}
浙公网安备 33010602011771号