ES6--map对象,for of 遍历,class类,extends继承

ES6的map对象非数组的map()方法

通俗解释  map是用来存储东西的,类似obj

写法

举例:

var map = new Map();
  map.a = 1
  map.b = 2
 console.log(map) 

ES6--map对象,for of 遍历,class类,extends继承

 

再回头看看数组,同样的添加属性

var arr = [];
  arr.a = 1
  arr.b = 2
 console.log(arr) 

 

ES6--map对象,for of 遍历,class类,extends继承

 

两者很相似

 由此得出结论:map对象,作为被new出来的引用值,通过打点的方式添加属性,length却是0,说明属性被直接添加到了map对象上去了,而实际的存储值却没有,

可以理解为,打点添加,只是在给map对象添加属性,但是不作为map对象的子元素

 

关于map对象的增删查改

 var map = new Map(); 
 map.set("a","123");
 map.set("b","456");  //增与改
 console.log(map)    
 console.log(map.get("a")) //查

ES6--map对象,for of 遍历,class类,extends继承

var map = new Map(); 
 map.a = 1
 map.set("a","123");
 map.set("b","456")
 map.delete("a")  //删
 delete map.a  //删属性
console.log(map) 

 

map对象的遍历

此对象的遍历用for循环肯定是不可行的

试一下for in

var map = new Map(); 
 map.a = 1
 map.set("a","123");
 map.set("b","456")
for(var key in map){
    console.log(key)  //a
    console.log(map[key]) //1
}

结果表示利用 for in 循环来遍历属性还是挺好用的


 

 可以用ES6新增的for of

for of  循环对象的话,浏览器会告诉你,对象不可重复

可以遍历数组的

但是主要是用来循环map对象的

如下:

 var map = new Map(); 
 map.a = 1
 map.set("a","123");
 map.set("b","456")
for(var key of map){
    console.log(key)  //["a", "123"]  ["b", "456"]
}

key值以数组形式返回

 

既然key值是数组,那又有了新玩法: 

var map = new Map(); 
 map.a = 1
 map.set("a","123");
 map.set("b","456")
for(var [key,value] of map.entries()){
    console.log(key)    //a  b
    console.log(value)  //123  456
}

补充 :map.entries()为map对象的全写

 

如果仅仅只想遍历value呢?

map换map.values()

如下玩法:

 var map = new Map(); 
 map.a = 1
 map.set("a","123");
 map.set("b","456")
for(var val of map.values()){
    console.log(val)  //123  456
}

如果仅仅只想遍历key呢?

map换map.keys()
如下玩法:
var map = new Map(); 
 map.a = 1
 map.set("a","123");
 map.set("b","456")
for(var key of map.keys()){
    console.log(key)  //a b
}

 

calss(类)

传统的javascript中只有对象,没有类的概念。它是基于原型的面向对象语言。原型对象特点就是将自身的属性共享给新对象。

class Person{//定义了一个名字为Person的类
    constructor(name,age){//constructor是一个构造,用来接收参数
        this.name = name;//this代表的是实例对象
        this.age=age;
    }
    say(){//这是一个类的方法,注意千万不要加上function
        return "我的名字叫" + this.name+"今年"+this.age+"岁了";
    }
}

let p1 = new Person("jack",18)  //创建实例对象
console.log(p1.say())    //我的名字叫jack今年18岁了

注意:

1.类声明不需要加function

2.方法不在constructor里

 继承

通过extends来继承

 class Person{//定义了一个名字为Person的类
    constructor(name,age){//constructor是一个构造方法,用来接收参数
        this.name = name;//this代表的是实例对象
        this.age=age;
    }
    say(){      //类的方法
        return  "我的名字叫" + this.name+"今年"+this.age+"岁了";
    }    
}
let p1 = new Person("jack",18)
 class Son extends Person {}
 let son =new Son("tony",20)
 console.log(son.name)  //tony

 继承例子2:

class Person{
    constructor(name,age){
        this.name = name;
        this.age=age;
    }
    say(){
        return  "我的名字叫" + this.name+"今年"+this.age+"岁了";
    }
}
let p1 = new Person("jack",18)
class Son extends Person { constructor(name,age,color){ super(); //写继承,必须加上的,而且是加在this的上面 this.name = name; this.age = age; this.color = color; } } let son =new Son("tony",20,"black") console.log(son.name) //tony console.log(son.say()) //我的名字叫tony今年20岁了

 

上一篇:由于Java中的类不能扩展多个类.我怎么能得到这个?


下一篇:Django模板之模板继承(extends/block)