jeddygong / frontend-document

前端每日一练,大厂面试题目,涵盖前端所有知识点,每天进步一点点。HTML/CSS/Javascript/Nodejs/Typescript/ECMAScript/Vue/React/Webpack/小程序/网络/设计模式/数据结构/算法/安全/工程化/性能优化
https://jeddygong.github.io/frontend-document
MIT License
10 stars 4 forks source link

[JS] [2021-01-21 更新] 介绍下class 和 ES5 的类的区别?并说说 new 执行的过程? #15

Open jeddygong opened 3 years ago

jeddygong commented 3 years ago

前言

区别

代码示例

/**
 *ES6的类
**/
const bar = Symbol('bar');
const snaf = Symbol('snaf');
class Parent {
    constructor(a) {
        this.a = a;
        this.printName = this.printName.bind(this)
    }
    print() {
        console.log('parent')
    }
    printName(name = 'there') {
        this.print(`Hello ${name}`);
    }
    // 公有方法
    foo(baz) {
        this[bar](baz);
    }
    // 私有方法
    [bar](baz) {//[bar]用方括号代表从表达式获取的属性名
        return this[snaf] = baz;
    }

}

等同于es5的:

function Parent () {}
Parent.prototype = {
    constructor() { },
    print() { },
}

所有原型方法属性都可用Object.getOwnPropertyNames(Point.prototype)访问到

关于New

注意:class 定义的类,必须使用new关键字调用,不然会报错,

​ new关键字总是返回一个对象,如果new 普通函数,会返回一个空对象。

关于构造函数constructor