学习es6的day04

本文详细介绍了ES6中的Map数据结构,包括其特点、API及应用场景。接着,深入讲解了ES6的类(class),包括构造器、实例方法、静态方法和继承机制。此外,还阐述了Symbol数据类型的作用,如唯一标识符、在对象中的使用以及全局注册与查找。文章最后讨论了如何使用Symbol消除魔术字符串,提高代码质量。
摘要由CSDN通过智能技术生成

Map集合
    类似于对象,key-value对应的集合。
    1)特点:
      key值不局限于字符串,可以是任意数据类型
    2)API
      Map.prototype.size    返回 Map 结构的成员总数。
      Map.prototype.set(key, value)    set方法设置键名key对应的键值为value,然后返回整个map结构。如果key已经有值,则键值会被更新,否则就新生成该键。
      Map.prototype.get(key)    get方法读取key对应的键值,如果找不到key,返回undefined。
      Map.prototype.has(key)    has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。
      Map.prototype.delete(key)delete方法删除某个键,返回true。如果删除失败,返回false。
      Map.prototype.clear()    清除所有成员,没有返回值
      Map.prototype.keys()    返回键名的遍历器
      Map.prototype.values()    返回键值的遍历器
      Map.prototype.entries()    返回键值对的遍历器
      Map.prototype.forEach()    使用回调函数遍历每个成员
四、ES6-day04
  1.class类
    1)介绍
      ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。
      通过class关键字,可以定义类。ES6 的class可以看作是构造函数一个语法糖
      语法糖:具有特殊功能的代码写法,内部封装了一些方法,让一些复杂代码的编写及其用法变得简单
    2)构造器
      constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。
      一个类必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。
      class Person{
        constructor(name,age){
          this.name = name;
          this.age = age;
        }
      }
    3)实例方法、属性
      定义在类体中的方法称为实例方法。如下,sayName方法就是实例方法,
      本质上该方法应该是声明在Person.prototype中,可供所有的实例调用,因此称为实例方法。
      class Person{
        constructor(name,age){
          this.name = name;
          this.age = age;
        }
        sayName(){
          console.log("i am ",this.name);
        }
      }
    4)静态方法、属性
      通过static关键字来定义静态属性和静态方法。
      静态属性和静态方法是定义在类【构造函数】上的,所以可以通过类【构造函数】直接访问。
      在静态方法中,this指向当前类【构造函数】
      class Person{
        static num = 200;
        static number(){
          return this.num;
        }
      }
      console.log(Person.number());    //200
    5)继承
      ES5继承
        借用构造函数继承
          function Animal() {}
          function Dog() {
            Animal.call(this)
          }
        原型链继承
          子构造函数的原型指向父构造函数的实例
          Dog.prototype = new Anmimal()
      ES6继承
        用法
          class Dog extends Anmimal {
            constructor(name,age,weight) {
              super(name,age);
            }
          }
          let dog = new Dog('二狗',1,'10KG')
        子类继承父类(构造函数继承,继承静态方法、属性)
          子类的构造函数继承父类的构造函数
          子类构造函数的原型对象指向父类构造函数
          Dog.__proto__ === Animal
        子类原型对象继承父类原型对象(方法继承,继承实例方法、属性)
          Dog.prototype.__proto__ === Animal.prototype
          dog.__proto__.__proto__ === Animal.prototype
  2.Symbol
    1)介绍
      ES6 引入的一种新的原始数据类型Symbol,表示独一无二的值。
      Symbol函数可以接受参数,表示对于这个唯一值的描述。
    2)使用
      Symbol()函数会返回symbol类型的值
        let s = Symbol()
        typeof s ;    //’symbol’
        symbol类型的值是独一无二的
      在对象中使用symbol
        用于对象的属性名,就能保证不会出现同名的属性。
        这对于一个对象由多个模块构成的情况非常有用,能防止某一个键被不小心改写或覆盖
        let sy1 = Symbol();
        obj[sy1] = 'hello'
        let obj2 = {
          ...obj1,
          // key为变量时,需要用[]包裹
          [sy1]: 'world'
        }
    3)Symbol.for(key)
      和 Symbol()不同的是,用Symbol.for()方法创建的symbol会被放入一个全局symbol注册表中。
      并不是每次都会创建一个新的symbol,它会首先检查给定的 key 是否已经在注册表中了。
      假如是,则会直接返回上次存储的那个。否则,它会再新建一个。
      比如:调用Symbol.for("cat")30 次,每次都会返回同一个 Symbol 值,但是调用Symbol("cat")30 次,会返回 30 个不同的 Symbol 值。
      如果想要用同一个变量,可以使用Symbol.for('name')注册一个全局的,下次如果要获取该symbol值,则再次Symbol.for('name')

    4)Symbol.keyFor(sy1)  
      检测symbol值是否在全局登记过,返回key或者undefined。
      返回一个已登记的 Symbol 类型值的 key ,用来检测该字符串参数作为名称的 Symbol 值是否已被登记。

    5)应用:消除魔术字符串:
      魔术字符串指的是,在代码之中多次出现、与代码形成强耦合的某一个具体的字符串或者数值。
      风格良好的代码,应该尽量消除魔术字符串,改由含义清晰的变量代替。
      let baseUrl = 'http://234.234.234.434:7788'
      $.get(baseUrl+'/user/findAll')
      $.post(baseUrl+'/user/saveOrUpdate')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值