文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JavaScript中的常见继承总结

2024-04-02 19:55

关注

前言

我们在学习前端的过程中一定会遇到继承这个问题

继承其实就是构造函数和构造函数之间的一种关系

当一个构造函数A的实例使用构造函数B身上的属性和方法,这个时候我们就说构造函数A继承至构造函数B。

我们一般把构造函数A称之为子类,构造函数B称之为父类。

想要弄明白继承就要先弄明白原型链

原型链

  function Person() {
            // 属性
            this.name = 'Jack'
            this.age = 18
            this.gender = '男'
        }
		// 实例
        const p = new Person()


        // 1.p 的 __proto__ 指向了谁?
        console.log(p.__proto__ === Person.prototype)

        // 2.Person 的 __proto__ 指向了谁 ?
        console.log(Person.__proto__ === Function.prototype)

        // 3.Person.prototpye 的 __proto__ 指向了谁 ?
        console.log(Person.prototype.__proto__ === Object.prototype)

        // 4.Function.prototype 的 __proto__ 指向了谁 ?
        console.log(Function.prototype.__proto__ === Object.prototype)

        // 5.Function 的 __proto__ 指向了谁 ?
        console.log(Object.prototype.__proto__)

        // 6.Object.prototype 的 __proto__ 指向了谁 ?
        console.log(Function.__proto__ === Function.prototype)

        // 7.Object 的 __proto__ 指向了谁 ?
        console.log(Object.__proto__ === Function.prototype)

常用的继承方法

我们在面试或者开发过程中使用做多的继承有:

当然还有一些别的继承,其它的继承相对于上面的三种情况使用的就少了很多:

主要介绍上面的三种继承

原型继承

原理

优点

缺点

        // 父类
        function Person(name, age) {
            //属性
            this.name = name
            this.age = age
        }
        // 方法
        Person.prototype.paly = function () { console.log('玩游戏'); }
​
        // 子类
        function Students(classRoom) {
            // 属性
            this.classRoom = classRoom
        }
​
        // 把子类的原型指向父类的实例对象
        // 把父类的实例赋值给子类的原型(原型对象)
        // 创建一个父类的实例
        const p = new Person('Jack', 25)
        // 子类的实例指向父类的原型对象
        Students.prototype = p
​
       // 实例化一个对象
       let s = new Students('高级1班')
       console.log(s);
       let s1 = new Students('高级2班')
       console.log(s1);

执行结果

借用构造函数继承

原理

优点

缺点

父类的原型上的方法没有继承下来:

// 父类
function Person(name, age) {
    // 属性
    this.name = name
    this.age = age
}
// 原型对象上添加一个方法
Person.prototype.paly = function () { console.log('玩游戏'); }
// 子类
function Students(name, age,classRoom) {
    this.classRoom = classRoom
    // 因为这个this指向的就是子类的实例
    Person.call(this, name, age)
}
// 实例化一个对象
let s = new Students('张三',25,'高级1班')
console.log(s);
let s1 = new Students('李四',20,'高级2班')
console.log(s1);

执行结果

组合继承

原理

优点

缺点

子类的原型上有一套多余的属性:

// 父类
function Person(name, age) {
    // 属性
    this.name = name
    this.age = age
}
// 原型对象上添加一个方法
Person.prototype.paly = function () { console.log('玩游戏'); }
// 子类
function Students(name, age,classRoom) {
    this.classRoom = classRoom
    // 借用构造函数继承
    Person.call(this, name, age)
}
// 原型继承
// 主要的目的就是为了使用父类身上的方法
Students.prototype = new Person()
​
// 实例化一个对象
let s = new Students('张三',25,'高级1班')
console.log(s);
​
let s1 = new Students('王五',24,'高级2班')
console.log(s1);
s1.play()

执行结果

到此这篇关于JavaScript中的常见继承总结的文章就介绍到这了,更多相关JS常见继承内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯