在JavaScript中,类的实现是基于其原型继承机制的。如果两个实例都从同一个原型对象上继承了属性,我们说它们是同一个类的实例。

# ES5中的继承

// 创建父类
function Person(name){
    this.name = name;
    this.className = 'Person';
}
// 为父类的原型上挂方法
Person.prototype.getName=function(){
    return this.name;
}


// 创建一个子类
function Man(name){

}

// 下面如何让类Man继承类Person呢??
// 1、首先就是在Man的构造函数里面初始化Person类的属性
function Man(name){
    // 将父类的属性绑定到Man的this上,并且赋值
    Person.apply(this,arguments);
    // 这里需要注意的是:Person.apply(this,arguments);这句代码一定要写在第一行,避免覆盖Man自己的属性
    this.name=name;
}

// 2、绑定Person的原型
Man.prototype = Object.create(Person.prototype);
// 将Person类的原型对象绑在Man.prototype的原型对象上,为什么不直接这么写
// Man = Object.create(Person.prototype);
// 像上面那么写的话,如果Man的原型对象上有自己的其他方法或者属性,那就会被覆盖掉


// 3、维护Man原型上的constructor属性
Man.prototype.constructor = Man;

# ES6中的继承

es6引入了class、extends、super、static(部分为ES2016标准)

// 定义父类
class Person {
    constructor(opt){
        this.name = opt.name;
        this.age = opt.age;
    }
    getName(){
        return this.name;
    }
    // 静态方法,也可被继承
    static getAge(){
        return this.age;
    }
}

// 定义子类
class Man extends Person {
    constructor(opt){
        // 如果有super,需要放在第一句执行
        super(opt);
        this.job = 'JS'
    }
}
Last Updated: 5/30/2022, 3:18:49 PM