题目:es6 class 的 new 实例和 es5 的 new 实例有什么区别?

ES6中(和ES5相比),classnew实例有以下特点:

  • class的构造参数必须是new来调用,不可以将其作为普通函数执行
  • es6class不存在变量提升
  • 最重要的是:es6 内部方法不可以枚举。es5 的prototype上的方法可以枚举。

为此我做了以下测试代码进行验证:

console.log(ES5Class()); // es5:可以直接作为函数运行
// console.log(new ES6Class()) // 会报错:不存在变量提升
function ES5Class() {
    console.log("hello");
}
ES5Class.prototype.func = function() {
    console.log("Hello world");
};
class ES6Class {
    constructor() {}
    func() {
        console.log("Hello world");
    }
}
let es5 = new ES5Class();
let es6 = new ES6Class();
// 推荐在循环对象属性的时候,使用for...in
// 在遍历数组的时候的时候,使用for...of
console.log("ES5 :");
for (let _ in es5) {
    console.log(_);
}
// es6:不可枚举
console.log("ES6 :");
for (let _ in es6) {
    console.log(_);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

参考/推荐《JavaScript 创建对象—从 es5 到 es6》

来自: ES5和ES6对象 | 心谭博客
作者:心谭
Star仓库:github