Fork me on GitHub

继承——组合继承、类继承

在ES6以前没有extends继承,可以通过构造函数+原型对象模拟实现继承,被称为组合继承。

1、借用父构造函数继承属性

复制代码
// 借用父构造函数继承属性
        // 1、父构造函数
        function Father(uname, age) {
            // this 指向父构造函数的对象实例
            this.uname = uname
            this.age = age
        }
        // 2、子构造函数
        function Son(uname, age, score) {
            // this 指向子构造函数的对象实例
            Father.call(this, uname, age) // 使用call方法将父构造函数中的this变为子构造函数中的this
            this.score = score
        }
        var son = new Son('刘德华', 19, 100)
        console.log(son)
复制代码

2、借用原型对象继承父类型方法

复制代码
// 1、父构造函数
        function Father(uname, age) {
            // this 指向父构造函数的对象实例
            this.uname = uname
            this.age = age
        }
        Father.prototype.money = function () {
            console.log(10000)
        }
        // 2、子构造函数
        function Son(uname, age, score) {
            // this 指向子构造函数的对象实例
            Father.call(this, uname, age) // 使用call方法将父构造函数中的this变为子构造函数中的this
            this.score = score
        }
        // Son.prototype = Father.prototype // 这样直接赋值会有问题,如果修改了子原型对象,父原型对象也会跟着一起变化
        // 所以要用下面这一种,通过原型链的原理来继承
        Son.prototype = new Father() // Father的实例对象可以拿到Father.prototype的方法,但是实例对象会新开辟一个地址,不会影响到Father.prototype
        // 这样覆盖之后,Son.prototype的constructor是指向Father的,这不正确,应该指向Son才对,所以还有一步操作
        Son.prototype.constructor = Son // 如果利用对象的形式修改了原型对象,别忘了利用constructor指回原来的构造函数
        Son.prototype.exam = function () {
            console.log('孩子要考试')
        }
        var father = new Father('张学友', 18)
        var son = new Son('刘德华', 19, 100)
        console.log(father)
        console.log(son)
        console.log(Father.prototype)
        console.log(Son.prototype)
复制代码

ES6之前通过   构造函数+原型实现面向对象编程

构造函数几大特点

1、构造函数有原型对象prototype。

2、构造函数原型对象prototype里面有constructor指向构造函数本身。

3、构造函数可以通过原型对象添加方法。

4、构造函数创建的实例对象有__proto__原型指向 构造函数的原型对象。

 

ES6之后通过 类 实现面向对象编程

 

类的本质

1、class本质还是一个函数 我们也可以简单的认为类就是构造函数的另外一种写法。

2、类的所有方法都定义在类的prototype属性上。

3、类创建的实力里面也有__proto__指向类的prototype原型对象。

4、所以ES6的类它的绝大部分功能,ES5都可以做到,新的class写法只是让对象原型的写法更加清晰,更加面向对象编程的语法而已。

5、所以ES6的类其实就是语法糖。

6、语法糖:语法糖就是一种便捷的写法,简单理解,有两种方法可以实现同样的功能,但是一种写法更加清晰、方便,那么这个方法就是语法糖。

 

posted @   spikezz  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
1
点击右上角即可分享
微信分享提示