ES5/ES6的继承除了写法以外还有什么区别
2023-06-13 09:13:56 时间
1.class 声明会提升,但不会初始化赋值,类似于let const声明变量
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 内部启用了严格模式
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所有方法不可枚举(包括静态方法和实例方法)
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调用
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 内部无法重写类名
相关文章
- es6字符串的方法_es6模板字符串
- es6模板字符串_es6模板差值
- ES6—class类详细教程(下)
- es6数组的flat()方法
- 数组操作方法(包括es6数组的操作方法)[通俗易懂]
- 前端2年经验,你居然不知道ES6?
- ES6--模板字符串
- 每天3分钟,重学ES6-ES12(十八) CJS
- ES6新特性之Map和Set
- babel es6转es5原理_vue用es6还是es5
- ES6中set和map「建议收藏」
- es6 set和map_数据结构什么叫度
- 每天3分钟,重学ES6-ES12(十)Promise参数实例方法介绍
- ES6之Set对象详解
- es6中的Let和Const详解
- 面试常问,工作常用的ES6新增的功能有哪些?
- ES6-异步遍历器(五)
- ES6转ES5_nodejs支持es6吗
- ES6 学习笔记(十一)迭代器和生成器函数
- Js如何模拟继承机制分别使用Es5和Es6来实现
- ES6中的模板字符串和新XSS Payload