前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ES5/ES6的继承除了写法以外还有什么区别

ES5/ES6的继承除了写法以外还有什么区别

作者头像
刘嘿哈
发布2022-10-25 14:13:32
2220
发布2022-10-25 14:13:32
举报
文章被收录于专栏:js笔记

1.class 声明会提升,但不会初始化赋值,类似于let const声明变量

代码语言:javascript
复制
  const b=new B();
    function B(){
        this.b=100;
    }
    // 报错 Cannot access 'A' before initializationat
    const a=new A()
    class A{
        constructor(){
            this.a=99
        }
    }

2.class 内部启用了严格模式

代码语言:javascript
复制
  class A{
        constructor(){
            //ReferenceError: s is not defined
           s=99
        }
        say(){
          //ReferenceError: z is not defined
            z=99;
            console.log(z)
        }
    }
    const a=new A();
    a.say()

3.class所有方法不可枚举(包括静态方法和实例方法)

代码语言:javascript
复制
    class A {
        static eat() {
            console.log("会吃")
        }
        constructor() {
            this.name="tom"
        }
        say() {
            console.log("会说")
        }
    }
    console.log(Object.keys(A))//[]
    console.log(Object.keys(A.prototype))//[]

4.class中方法没有prototype,所有没有constructor,不能使用new调用

代码语言:javascript
复制
function b(){
this.a=99
}
const b1=new b()
//普通函数有一个prototype对象,对象中constructor指向函数本身
b===b.prototype.constructor//true

//构造函数的实例对象的__proto__指向构造函数的prototype,
b1.__proto__===b.prototype //true
class Foo {
  constructor() {
    this.foo = 99;
  }
  print() {
    console.log(this.foo);
  }
}
const foo = new Foo();
const fooPrint = new foo.print(); //not a constructor

5.必须使用new 调用class

6.class 内部无法重写类名

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档