ECMAScript6新增功能续
迭代器 Iterators
Iterators 迭代 轮流交换,Iterators有几个特点,每次执行的时候会返回一个对象
对象里面有两样东西,{value:xx,done:true/false}
,value是返回的值,done的值是一个布尔值,判断是否还有要迭代的东西。完成迭代值为true。另外Itrerators里面还有一个next()方法,每次执行这个方法的时候会返回一个对象,对象里的东西就是value和done这两个属性。如果没有迭代的东西的话,执行next这个方法之后,value这个值会变成undefined,done会变为true。es6中generator可以生成迭代,但是这里我们手工创建一个迭代器。
'use strict'
function chef(food){
let i=0;
return{
next(){
let done=(i>=food.length);
let value=!done?food[i++]:undefined;
return{
value:value,
done:done
}
}
}
}
let aChef=chef(["tea","tomato","potato"]);
console.log(aChef.next());
console.log(aChef.next());
console.log(aChef.next());
生成器Generators
generators可以解决手工生成迭代器的麻烦,
//定义一个生成器,生成器名字chef,yield是生成器的返回值
// function* chef(){
// yield "tea";
// yield "cake";
// }
function* chef(food){
for(var i=0;i<food.length;i++){
yield food[i];
}
}
//基于生成器创建一个迭代器,这个aChef就是迭代器
// let aChef=chef();
let aChef=chef(["tea","cake"]);
console.log(aChef.next()); //输出{value:"tea",done:false}
console.log(aChef.next());//输出{value:"cake",done:false}
console.log(aChef.next());//输出{value:"undefined",done:true}
class 类
创建类的实例使用类内的方法
class Chef {
constructor(food){
this.food=food;
} //初始化的东西放在这个方法里面
cook(){
console.log(this.food);
}//添加方法,不需要逗号隔开
}
let aChef=new Chef("cake");
aChef.cook();
set和get
class Chef {
constructor(){
this.dish=[]; //添加一个新属性
} //初始化的东西放在这个方法里面
get menu(){
return this.dish;
}
set menu(dish){
this.dish.push(dish);
}//这个set的作用就是把dish推送到this.dish里面
}
let aChef=new Chef();
console.log(aChef.menu="cake"); //输出:cake
console.log(aChef.menu="milk");//输出:milk
console.log(aChef.menu); //输出一个数组 ["cake","milk"]
静态方法static
在类里面添加静态方法,关键字static,静态方法就是不需要实例化类就可以使用的方法
class Chef {
static cook(food){
console.log(food);
}
}
Chef.cook("milk");//输出milk
继承 extends
class Person{
constructor(name){
this.name=name;
}
intro(){
return this.name;
}
}
class Chef extends Person{
constructor(name){
super(name); //super可以调用父类里的东西
}
}
let Mike=new Chef("Mike");
console.log(Mike.intro());
Set
一个set就是一堆东西的集合,类似数组,但是和数组不一样的是set中不能放相同的东西。
let dessert=new Set("abc");
dessert.add("tomato");
console.log(dessert);
console.log(dessert.size);
console.log(dessert.has("a"));
dessert.delete("a");
console.log(dessert);
//循环处理set里面的东西
dessert.forEach(dessert=>{
console.log(dessert)
});
dessert.clear();
console.log(dessert);