JS 中的继承
原生JS(ES5)中的继承
对象冒充继承: 没法继承原型链上面的属性和方法
function Person(name, age) {
this.name = name;
this.age = age;
this.run = function () {
console.log(`${this.name} is ${this.age}岁`)
}
}
Person.prototype.sex = '男'
Person.prototype.work = function () {
console.log(`${this.name} is ${this.sex} and ${this.age}岁`)
}
function Man(name, age) {
Person.call(this, name, age) //对象冒充实现继承
}
var man = new Man('sally', 18)
man.run()
man.work()
/**
man.work is not a function
*/
原型链继承:可以继承构造函数里面以及原型链上面的属性和方法,实例化子类的时候没法给父类传参
function Person(name, age) {
this.name = name;
this.age = age;
this.run = function () {
console.log(`${this.name} is ${this.age}岁`)
}
}
Person.prototype.sex = '男'
Person.prototype.work = function () {
console.log(`${this.name} is ${this.sex} and ${this.age}岁`)
}
//原型链继承
function Man(name, age) {}
Man.prototype = new Person()
var man = new Man('sally', 18)
man.run()
man.work()
/**
undefined is undefined岁
undefined is 男 and undefined岁
*/
采用原型链继承和对象冒充继承相结合的方式继承:
function Person(name, age) {
this.name = name;
this.age = age;
this.run = function () {
console.log(`${this.name} is ${this.age}岁`)
}
}
Person.prototype.sex = '男'
Person.prototype.work = function () {
console.log(`${this.name} is ${this.sex} and ${this.age}岁`)
}
//对象冒充实现继承
function Man(name, age) {
Person.call(this, name, age)
}
//原型链继承
Man.prototype = new Person()
var man = new Man('sally', 18)
man.run()
man.work()
/**
* sally is 18岁
* sally is 男 and 18岁
*/
ES6 中的继承
通过 extends 关键字:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
getInfo() {
console.log(`姓名:${this.name} 年龄:${this.age}`);
}
run() {
console.log('run')
}
}
class Man extends Person { //继承了Person extends super(name,age);
constructor(name, age, sex) {
super(name, age); //实例化子类的时候把子类的数据传给父类
this.sex = sex;
}
print() {
console.log(this.sex);
}
}
var man = new Man('jack', '30', '男');
man.getInfo();
/**
* 姓名:jack 年龄:30
*/

浙公网安备 33010602011771号