ES6常用功能及开发环境使用
文章目录
1. ES6模块化的使用与开发环境打包
ES6模块化是一种将代码分割成不同模块,然后通过import
和export
关键字进行导入和导出的方式。这样做的好处是使得代码结构清晰,易于维护和拓展。
1.1 模块化的基本语法
/* utils.js */
export default {
a: 100
};
/* utils2.js */
export function fn1() {
alert('fn1');
}
export function fn2() {
alert('fn2');
}
/* index.js */
import util1 from './utils.js';
import { fn1, fn2 } from './utils2.js';
console.log(util1);
fn1();
fn2();
1.2 开发环境配置
在开发环境中使用ES6模块化语法时,由于不同浏览器对ES6的支持程度不同,我们需要使用Babel进行代码转换,然后使用Webpack或Rollup进行打包。
-
安装Babel和Webpack或Rollup:
npm install --save-dev @babel/core @babel/preset-env babel-loader webpack
或
npm install --save-dev @babel/core @babel/preset-env babel-rollup
-
创建
.babelrc
文件:{ "presets": ["@babel/preset-env"] }
-
配置Webpack或Rollup:
- Webpack配置:创建
webpack.config.js
文件,并配置入口和输出等信息。 - Rollup配置:创建
rollup.config.js
文件,并配置入口、输出、插件等信息。
- Webpack配置:创建
-
运行开发环境:
使用Webpack:在
package.json
中配置脚本"start": "webpack --mode development"
,然后运行npm start
。使用Rollup:在
package.json
中配置脚本"start": "rollup -c"
,然后运行npm start
。
1.3 总结
ES6模块化为前端开发带来了更好的代码组织方式,但由于浏览器的支持情况不一,使用Babel进行代码转换和Webpack或Rollup进行打包是开发中常用的方式。
2. Class和普通构造函数的区别
Class是ES6引入的一种语法糖,让JavaScript面向对象编程更加便捷和直观。它与普通构造函数相比,有以下区别:
普通构造函数:
function MathHandle(x, y) {
this.x = x;
this.y = y;
}
MathHandle.prototype.add = function () {
return this.x + this.y;
};
var m = new MathHandle(1, 2);
console.log(m.add());
Class:
class MathHandle {
constructor(x, y) {
this.x = x;
this.y = y;
}
add() {
return this.x + this.y;
}
}
const m = new MathHandle(1, 2);
console.log(m.add());
区别:
- 语法上更贴合面向对象的写法:Class使得面向对象编程更加直观和易读。
- 实现继承更便捷:Class的继承使用
extends
关键字,更易于理解和实现。
总的来说,Class是ES6提供的更现代化的面向对象编程方式,但本质上它仍然是基于原型的继承。
3. Promise的基本使用与原理
Promise是ES6引入的解决异步编程的方案,它代表了一个异步操作的最终完成或失败,并返回结果。
3.1 基本使用
function loadImg(src) {
return new Promise(function (resolve, reject) {
const img = document.createElement('img');
img.onload = function () {
resolve(img);
};
img.onerror = function () {
reject();
};
img.src = src;
});
}
const src = 'http://';
const result = loadImg(src);
result.then(
function (img) {
console.log(img.width);
},
function () {
console.log('failed');
}
);
3.2 Promise原理
- 创建Promise实例时,传入一个执行器函数,该函数接受两个参数
resolve
和reject
,分别表示异步操作成功和失败。 - 异步操作完成时,调用
resolve
并传递结果,异步操作失败时,调用reject
。 - 使用
.then()
方法来处理Promise的结果,它接受两个回调函数作为参数,第一个用于处理成功结果,第二个用于处理失败结果。
3.3 总结
Promise是解决异步编程问题的一种重要机制,通过链式调用.then()
方法,使得代码更加简洁和易读,同时避免了回调地狱(Callback Hell)。
4. ES6其他常用功能
除了模块化、Class和Promise,ES6还有许多其他常用功能:
- let和const:用于声明变量,其中
let
具有块级作用域,而const
用于声明常量。 - 多行字符串和模板变量:使用反引号(``)创建多行字符串,可以在其中使用
${}
进行模板变量的替换。 - 解构赋值:用于从数组或对象中提取值并赋给变量,简化了数据处理的步骤。
- 块级作用域:使用
{}
创建块级作用域,使得变量的作用范围更加清晰。 - 函数默认参数:在函数声明中为参数设置默认值,简化了函数的调用方式。
- 箭头函数:简化了函数的书写方式,并且自动绑定了上下文,避免了
this
指向的问题。