继承是为了让子类的实例使用父类的属性和方法
(1)构造函数继承方案:
== 在子类的构造函数体内,借用构造函数执行一下
== 并且强制让父类的构造函数的this指向子类的实例
(2)构造函数继承的优点:
1 继承来的属性下载了自己的身上,不需要去__proto__上找了;
2 自己需要的两个属性在一个构造函数里传递,不像原型继承需要在两地地方传递。
(3)构造函数继承的缺点:
1 只能继承父类的属性;
2不能继承父类的原始性prototype上的方法。
// 构造函数 Person(父类)
function Person(name, gender) {
this.name = name
this.gender = gender
}
Person.prototype.sayHi = function () {
console.log('hi')
}
// 构造函数 Student (子类)
function Student(age, name, gender) {
this.age = age
// 改变this指向
Person.call(this, name, gender)
// 此时Person作为普通函数被调用,Person里面的this是window,name属性和gender属性都被加在了window上,必须要调用父类的构造函数的时候,让父类的构造函数里面的this和子类里面的this指向的都是一样的地方,也就是指向实例对象,因此要改变本地调用的this指向
let s = new Student(18, 'lucy', '女')
console.log(s)
console.log(s.sayHi)
打印结果如下: