• 前端面试题整理——原型和原型链


    Class的使用:

        // 父类
        class People {
            constructor(name) {
                this.name = name
            }
    
            eat() {
                console.log(`${this.name} eat`)
            }
        }
    
        // 子类
        class Student extends People {
            constructor(name, number) {
                super(name);//super使用父类帮忙定义this.name
                this.number = number
            }
    
            sayHi() {
                console.log(`姓名:${this.name},学号:${this.number}`)
            }
        }
    
        const a = new Student('aaa',123)
        a.sayHi()
        a.eat()
    View Code

    类型判断-instance:

        // 父类
        class People {
            constructor(name) {
                this.name = name
            }
            eat() {
                console.log(`${this.name} eat`)
            }
        }
        // 子类
        class Student extends People {
            constructor(name, number) {
                super(name);//super使用父类帮忙定义this.name
                this.number = number
            }
            sayHi() {
                console.log(`姓名:${this.name},学号:${this.number}`)
            }
        }
        const a = new Student('aaa',123)
        // a instanceof Student // true
        // a instanceof People // true
        // a instanceof Object // true
    
        // [] instanceof Array // true
        // [] instanceof Object // true
    
        // {} instanceof Object // true
    View Code

    原型:

        // 父类
        class People {
            constructor(name) {
                this.name = name
            }
            eat() {
                console.log(`${this.name} eat`)
            }
        }
        // 子类
        class Student extends People {
            constructor(name, number) {
                super(name);//super使用父类帮忙定义this.name
                this.number = number
            }
            sayHi() {
                console.log(`姓名:${this.name},学号:${this.number}`)
            }
        }
        const a = new Student('aaa',123)
    
        // class 实际上是函数,是语法糖
        // typeof People // 'function'
        // typeof Student // 'function'
    
        // 隐式原型和显式原型
        console.log( a )
        console.log( a.__proto__ )
        console.log( Student.prototype )
        console.log( a.__proto__ === Student.prototype )
    
        // 原型关系
        // 每个class都有显式原型 prototype
        // 每个实例都有隐式原型 __proto__
        // 实例的__proto__指向对应class的prototype
    
        // 基于原型的执行规则
        // 先在自身属性和方法寻找
        // 如果找不到自动去__proto__寻找
    View Code

    原型链:

        // 父类
        class People {
            constructor(name) {
                this.name = name
            }
            eat() {
                console.log(`${this.name} eat`)
            }
        }
    
        // 子类
        class Student extends People {
            constructor(name, number) {
                super(name);//super使用父类帮忙定义this.name
                this.number = number
                this.rank = () => {
                    console.log('rank 10')
                }
            }
            sayHi() {
                console.log(`姓名:${this.name},学号:${this.number}`)
            }
        }
    
        const a = new Student('aaa', 123)
    
        console.log(a);
        console.log(Student.__proto__.prototype);
        console.log(People.prototype);
        console.log(Student.__proto__.prototype === People.prototype); // true
    
        // hasOwnProperty() 方法来验证是否该对象自己的
        console.log(a.hasOwnProperty('name'));
        console.log(a.hasOwnProperty('sayHi'));
        console.log(a.hasOwnProperty('rank'));
    
        // 原型链直至找到Object的__proto__为止,Object的__proto__为null
        // instanceof的原理是原型链查找模式,一步步对照Class的显式原型是否存在
    View Code
    放弃安逸,持续努力——成长
  • 相关阅读:
    SQL Server 创建定时任务(计划任务,job,)
    SQL Server 2008 删除大量数据
    树莓派设置3.5mm接口输出音频
    树莓派打造音乐播放机
    树莓派设置闹钟
    树莓派开启crontab日志
    在Winform界面中使用DevExpress的TreeList实现节点过滤查询的两种方式
    在EasyUI项目中使用FileBox控件实现文件上传处理
    使用FastReport报表工具实现信封套打功能
    使用FastReport报表工具生成图片格式文档
  • 原文地址:https://www.cnblogs.com/MarsPGY/p/13461944.html
Copyright © 2020-2023  润新知