文章目录加载中

ES5和ES6对象

题目: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(_);
}

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

本文来自心谭博客:xin-tan.com,经常更新web和算法的文章笔记,前往github查看目录归纳:github.com/dongyuanxin/blog
0