Class - 语法糖
- Class 在语法上更贴合面向对象的写法
- Class 实现继承更加易读、易理解
- 更易于写 java 等后端语言的使用
- 本质还是语法糖,使用 prototype
ES5中的写法
获取实例对象的原型对象Object.getPrototypeOf(m2)
判断实例与构造函数的原型对象是否有关系MathHandle2.prototype.isPrototypeOf(m2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16function MathHandle2(x, y) {
this.x = x
this.y = y
}
MathHandle2.prototype.add = function () {
return this.x + this.y
}
var m2 = new MathHandle2(1,3)
console.log(m2.add())
console.log(m2.__proto__ === MathHandle2.prototype) //true
// 获取实例对象的原型对象Object.getPrototypeOf()
console.log(Object.getPrototypeOf(m2) === MathHandle2.prototype) //true
// 判断实例与构造函数的原型对象是否有关系isPrototypeOf()
console.log(MathHandle2.prototype.isPrototypeOf(m2)) //true
ES6中的写法
对象实例的隐式原型(属性)指向构造函数的原型对象m.__proto__ === MathHandle.prototype
构造函数的原型对象的constructor属性指回了构造函数本身MathHandle.prototype.constructor === MathHandle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19class MathHandle { // 构造函数
constructor(x, y) {
this.x = x
this.y = y
}
add() {
return this.x + this.y
}
}
const m = new MathHandle(1, 3)
console.log(m.add()) //4
// 对象实例的隐式原型(属性)指向构造函数的原型对象
console.log(m.__proto__ === MathHandle.prototype) //true
// 构造函数的原型对象的constructor属性指回了构造函数本身
console.log(MathHandle.prototype.constructor === MathHandle) //true
继承
prototype
1 | function Animal() { |
extends
1 | class Animal { |
Promise
- new Promise 实例,而且要 return
- new Promise 时要传入函数,函数有 resolve、reject 两个函数
- 成功时执行 resolve(),失败时执行 reject()
- then 监听结果
1 | function loadImg(src) { |
ES6常用功能
- let const
- 多行字符串、模板变量
- 解构赋值
- 块级作用域
- 函数默认参数
- 箭头函数
1 | // let const |
关于 JS 众多模块化标准
- 没有模块化
- AMD成为标准,require.js(也有CMD)
- 前端打包工具,是node.js模块化可以被使用
- ES6出现,想统一现在所有模块化标准
- nodejs积极支持,浏览器尚未统一
模块化
- 语法:import export(注意有无default)
- 环境:babel编译 ES6 语法,模块化可用 webpack 和 rollup
- 扩展:对模块化标准统一的期待
Rollup
- rollup 功能单一,webpack 功能强大
- 参考设计原则和《Linux/Unix设计思想》
- 工具要尽量功能单一,可集成,可扩展
- gulp + rollup