再学ES6
- for…in遍历数组只能获取索引,且索引为字符串: “1”,”2"。for...of 获取值。forEach不能中断。
- Object.keys(obj)
- array.keys(),array.entries(),array.values()
- 可以用[...arr1, ...arr2]代替concat合并数组
- 数组去重:let result = […new Set(arr)];
- 函数的参数套函数,由里往外执行;
- Generator
- Promise
- 定义类:constructor中的 this.xx是自身属性,外面的方法是原型链上的属性,怎么在原型链上添加变量属性并不会,写在prototype上吧
- 静态方法前加static就好了,但ES6规定没有静态属性,除非 Me.xx这样直接写。
- Class.prototype === obj.__proto__ //true
- 类总结:
(类)静态方法与属性是类的,不是对象的。
extends继承的属性是所有属性,包括constructor中的和原型链上的
要想实现私有属性,得用闭包与get实现 - Module
CommonJS输出的是值拷贝,ES6输出的是值只读引用。
模块里面的值改变了,外面引用的值也会一起改变,且外面不能改这个值,因为在外面是只读的。module.exports与require(commonJS)是拷贝了一份不是引用,所以模块里的值变了,跟外面没关系
一个模块只能有一个export default,export default本质上是输出一个叫default的变量或方法,系统允许引入时取任意名字。
export default后面不要加声明语句(var,let),可以是变量名或者函数/对象
export * from ‘./x’会忽略x的default方法
export:
export var a = ‘xxx’;
var a = ‘xxx’; export {a}
export default var a = ‘xxx’
export {a} from ‘./xx’
export * from ‘./xx'
import:
import {a} from’./xx’
import * as obj from ‘./xx’
import a from ‘./xx' - 类:
原型链就是通过将子类构造函数的原型作为父类构造函数的实例,这样就连通了子类-子类原型-父类,原型链的特点就是逐层查找,从子类开始一直往上直到所有对象的原型Object.prototype,找到属性方法之后就会停止查找,所以下层的属性方法会覆盖上层。原型中属性的改变会反应到所有的实例上