如何写js中的继承

版权声明: https://blog.csdn.net/Helloyongwei/article/details/82250486

原型继承

js中有原型的概念, 通过原型我们可以实现继承.
定义一个函数为animal, 在其原型上定义一个sayHello函数. 并生成一个新对象dog.

function Animal(name){
    this.name = name
}
Animal.prototype.sayHello = function() {
    console.log('hello')

}
var dog = new Animal('dog')

console.log(dog)
//{name: "dog"}

打印dog返现dog是一个对象, 它并没有其他方法. 但是我们可以在dog对象上使用sayHello函数

dog.sayHello()
//hello

当普通函数加上new时, 就变成了构造函数. 构造函数的prototype属性指向其原型.
new+构造函数生成一个实例对象, 这个实例对象有一个__proto__属性也指向原型.
当实例对象调用某一个方法时, 会在自身属性中查找, 若没有则通过__proto__属性向原型查找.
这样通过原型链的方式我们可以实现继承.

class继承

class继承和原型继承类似.

class Animal {
    constructor(){
        console.log('这是class的构造函数')
    }
    sayHello(){
        console.log('hello')
    }
}

class Dog extends Animal {
    constructor(name){
        super()
        this.name = name
    }
}

var dog = new Dog('dog')
console.log(dog)
//{name: "dog"}

dog.sayHello()
//'hello'

class中的除了contructor表示构造函数, 其他一律为原型中的属性. Dog通过extends关键字继承自Animal. dog是Dog的实例, 当dog没有sayHello方法时, 变回向其父类寻找该方法.

猜你喜欢

转载自blog.csdn.net/Helloyongwei/article/details/82250486