es6 随便记一哈

13 class和module

  ①export和import

  profile.js

export var firstName = 'David';
export var lastName = 'Belle';
export var year = 1973;

//等价于
var firstName = 'David';
var lastName = 'Belle';
var year = 1973;
export { firstName , lastName , year}

  引用

import {firstName, year} from './profile'

 ②给export的属性或方法使用默认名称: 

export default function foo() { console.log('foo')}

  引用

import xx from './export-default.js';
xx();// 'foo'

  ③模块继承

   circleplus.js

export * from 'circle';// 输出circle模块所有属性方法
export default ...
export { xx } from 'circle'

  main.js

module math from 'circleplus';

import exp from 'circleplus';// 默认方法命名为exp

  而ES6模块输出的是值的引用

// lib.js
export let counter = 3;
export function incCounter() {
  counter++;
}

// main.js
import { counter, incCounter } from './lib';
console.log(counter); // 3
incCounter();
console.log(counter); // 4

12 promise

  基本用法

var promise = new Promise(function(resolve, reject){
   if(//成功)  resolve(value);
   else         reject(error) ;
})

promise.then( 
    function(value){// success} ,  
    function(value){ // failure}
) ;                       

  链式操作:返回新的Promise对象,后一个回调函数等待它有了结果,才进一步调用

  catch是then(null,rejection)的别名,“冒泡”向后传递直至被捕获

xx.then(  //dsf ).then( //xxx ).catch(
    error => {console.log(error);}
);

  Promise.all(promises).then(//xx).catch(//xxx)将多个异步操作或者Promise对象包装秤一个新的Promise对象,等所有执行完成后,该对象fuflled

  Promise.resolve将对象转换为Promise对象,如果参数不具有then方法,新Promise对象状态为resolved

  async function xx(){//xxx}表示函数体内有异步操作,会先返回等待异步执行完毕,继续执行体内剩下的操作

11 generator函数

  就是一个普通函数,但是包含一个内部状态遍历器,可以依次遍历状态。特征是function*后面跟着一个*号,用yield语句定义不同状态,或者说不同成员

  

function* hello(){
  yield 'hello';
  yield 'world';
  return 'ending'  ;  
}

  

var a = new hello();
a.next().next().next()

  应用

function* loadUI() {
   showLoadingScreen();
   yield loadUIDataAsynchronously() ;
   hideLoadingScreen();   
}

var loader = loadUI();
loader.next();// 加载UI
loader.next();// 卸载UI

  yield*语句,语法表明它返回一个遍历器

let delegatedIterator = (function* () {
   yield 'hello' ;
   yield 'bye'' 
}());
let delegatingIterator = (function* () {
  yield 'before;'
       yield*   delegatedIterator;
  yield 'after';
}())
for(let value of delegatingIterator ) {
  console.log(value)  ;
}

  还有遍历完全二叉树

10 Iterator和for of循环

  部署了next()方法的对象,就有了遍历器功能,next方法包含value,done两个属性的对象

function makeIterator(array) {
  var nextIndex = 0;

  return {
    next: function(){
      return nextIndex < array.length ?
         {value: array[nextIndex++], done:false} :
         {value: undefined, done:true}
}  
}  
}

  for in获取键名,for of获取键值

9 set和map

  Set()唯一不重复的数组,add delete has clear

  Map(),js对象只能用字符串做键,Map可以用字符串、对象做键;set(k, v)

 WeakMap() 只接受对象作为键名,键对应的对象未来可能消失,防止内存泄漏

8 函数扩展

  默认值; 。。。; =》 

7 对象扩展

  Object.is()   assgn(target, source1...)

  可以表达式作为对象键,要把表达式放在方括号内

var a = 'xdfs';
var obj = {
    "ddf"  : "asdf",
    [a] : "sdfdfd"
}

  Symbol()类型,独一无二不相等

  Proxy()拦截,可以类似于AOP做拦截器

       Object.observe(obj, observeFunction);

全部来自于阮一峰ECMAScript6入门

猜你喜欢

转载自www.cnblogs.com/tabCtrlShift/p/9236737.html