ES6语法 Promise Iterator

类和对象

基本定义:

class Parent{
  constructor(name='lmx'){  //name= 默认值
    this.name=name
  }
}
let v_parent = new Parent('v');
console.log(v_parent); 
//输出Parent {name: "v"}

继承

class Parent{
  constructor(name='lmx'){
    this.name=name
  }
}
class Child extends Parent{
  constructor(name=’child’){
    super(name);  //如果super中没有参数则都按照父类的默认值
  }
}
console.log(new Child())

getter和setter

class Parent{
  constructor(name='lmx'){
    this.name=name
  }
}
get longName(){
  return ‘mk’+this.name;
}
set longName( val){
  this.name = val
}
let v = new Parent();
console.log(v.longName())  //调用get方法
v.longName = ‘hello’   //调用set方法
console.log(v.longName())  

静态方法:static定义的是类的方法只有类能调用

class Parent{
constructor(name='lmx'){
this.name=name
}
static tell(){
  console.log(‘tell’)
}
Parent.tell()
}

静态属性:

ES6明确规定,Class内部只有静态方法,没有静态属性,但是可以通过  类名.变量  来定义

class Parent{
  constructor(name='lmx'){
    this.name=name
  }
}
Parent.abc=’123’ 

Promise

Promise.all([ ]).then() 表示把多个Promise实例当做一个Promise实例,当所有Promise实例状态发生改变之后,新的Promise才能发生改变,即当三个loadImg实例都加载完之后才会触发Promise.all方法,才会then,才执行showImg

//所有图片加载完了之后才一起显示
function loadImg(src){ 
  return new Promise((resolve,reject)=>{ 
    let img = document.createElement('img');
    img.src= src; 
    img.onload = function(){ resolve(img) };
    img.onerror = function(){ reject(err)} 
  })
}
function showImg(imgs){
  imgs.forEach(item=>{
    document.body.appendChild(item)
})
};
Promise.all([
  loadImg('http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg'),
  loadImg('http://img06.tooopen.com/images/20160818/tooopen_sy_175866434296.jpg'),
  loadImg('http://img06.tooopen.com/images/20160818/tooopen_sy_175833047715.jpg')
]).then(showImg)

Promise.race ([ ]).then()  多个实例中有一个状态率先改变之后,race实例会改变,其他的便忽略不管了

//只要有图片加载出来了就显示
function loadImg(src){ 
  return new Promise((resolve,reject)=>{ 
    let img = document.createElement('img');
    img.src= src; 
    img.onload = function(){ resolve(img) };
    img.onerror = function(){ reject(err)} 
  })
}
function showImg(imgs){
  imgs.forEach(item=>{
    document.body.appendChild(item)
  })
};
Promise.race([
  loadImg('http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg'),
  loadImg('http://img06.tooopen.com/images/20160818/tooopen_sy_175866434296.jpg'),
  loadImg('http://img06.tooopen.com/images/20160818/tooopen_sy_175833047715.jpg')
]).then(showImg)

Iterator接口

在数组中的应用

let arr = ['hello','world']; 
let map = arr[Symbol.iterator]();
console.log(map.next());
console.log(map.next());
console.log(map.next());
//输出,done变为true之后循环截止

 

自定义iterator接口

for...of循环

let obj = {
  start:[3,5,6],
  end:[4,8,9], 
  [Symbol.iterator](){   //iterator小写
    let self= this; 
    let index = 0; 
    let arr = self.start.concat(self.end);
    let len = arr.length; 
    return{ 
      next(){ 
        if(index<len){ 
          return {
            value:arr[index++], 
            done:false} 
        }else{ 
          return {
            value:arr[index++],
            done:true
          } 
        } 
      } 
    }  
  } 
} ; 
for(let key of obj){
  console.log(key)
}

  

猜你喜欢

转载自www.cnblogs.com/lskzj/p/9557284.html