ES6 学习笔记二

简介: ES6 学习笔记二

Object


  • Object.is()
    +0 == -0 // true +0 === -0 // true NaN == NaN // false Object.is(NaN, NaN) // true Object.is(+0, -0) // false

  • Object.assign()


let test = {}; Object.assign(test, {d: 'd', z: 'z', m: 'm'}); console.log(test); // {d: "d", z: "z", m: "m"}


let test = {}; Object.assign(test, {d: 'd', z: 'z', m: 'm'}, {d: 'x', z: 'y', m: 'q'}); console.log(test); // {d: "x", z: "y", m: "q"}


let test = {}; Object.assign(test, {d: 'd', z: 'z', m: 'm'}, {x: 'x', y: 'y', q: 'q'}); console.log(test); // {d: "d", m: "m", q: "q", x: "x", y: "y", z: "z"}


  • getPrototypeOf & setPrototypeOf


let dzm = { getDzm() { return 'dzm'; } }


let xyq = { getXyq() { return 'xyq'; } }


let tempDzm = Object.create(dzm); console.log(tempDzm.getDzm()); // dzm console.log(Object.getPrototypeOf(tempDzm)); // {getDzm: ƒ} console.log(Object.getPrototypeOf(tempDzm) === dzm); // true


// 使用 setPrototypeOf 前者会被后者全部替换覆盖 Object.setPrototypeOf(tempDzm, xyq); console.log(tempDzm.getDzm()); // tempDzm.getDzm is not a function console.log(tempDzm.getXyq()); // xyq console.log(Object.getPrototypeOf(tempDzm) === dzm); // false console.log(Object.getPrototypeOf(tempDzm) === xyq); // true


__proto__



let dzm = { getDzm() { return 'dzm'; } }


let xyq = { getXyq() { return 'xyq'; } }


let djy = { proto: dzm }


console.log(djy.getDzm()); // dzm console.log(Object.getPrototypeOf(djy) === dzm); // true


djy.proto = xyq; console.log(djy.getDzm()); // djy.getDzm is not a function console.log(djy.getXyq()); // xyq console.log(Object.getPrototypeOf(djy) === dzm); // false console.log(Object.getPrototypeOf(djy) === xyq); // true


  • 继承重写


let djy = { proto: dzm, getDzm() { return super.getDzm() + 'xyq'; } }


console.log(djy.getDzm()); // dzmxyq console.log(Object.getPrototypeOf(djy) === dzm); // true


Iterators 迭代器

function test(strs) {
  let i = 0;
  return {
    next() {
      let done = (i < strs.length);
      let value = done ? strs[i++] : undefined;
      return {
        value,
        done
      }
    }
  }
}
let temp = test(['d','z','m']);
console.log(temp.next()); // {value: "d", done: true}
console.log(temp.next()); // {value: "z", done: true}
console.log(temp.next()); // {value: "m", done: true}
console.log(temp.next()); // {value: undefined, done: false}

Generators 生成器


  • 使用生成器创建一个迭代器


function* test() { yield 'd'; yield 'z'; yield 'm'; }


let temp = test(); console.log(temp.next()); // {value: "d", done: true} console.log(temp.next()); // {value: "z", done: true} console.log(temp.next()); // {value: "m", done: true} console.log(temp.next()); // {value: undefined, done: false}


function* test(strs) {
  for (let index = 0; index < strs.length; index++) {
    yield strs[index];
  }
}
let temp = test(['d','z','m']);
console.log(temp.next()); // {value: "d", done: true}
console.log(temp.next()); // {value: "z", done: true}
console.log(temp.next()); // {value: "m", done: true}
console.log(temp.next()); // {value: undefined, done: false}

class

class Dzm {
  // 初始化方法
  constructor(strs) {
    this.strs = strs;
  }
  log() {
    console.log(this.strs);
  }
}
let dzm = new Dzm('dzm');
dzm.log(); // dzm

set & get

class Dzm {
  constructor() {
    this.names = [];
  }
  get menu() {
    return this.names;
  }
  set menu(name) {
    this.names.push(name);
  }
}
let dzm = new Dzm();
console.log(dzm.menu = 'dzm'); // dzm
console.log(dzm.menu = 'xyq'); // xyq
console.log(dzm.menu); // ["dzm", "xyq"]

static

class Person {
  constructor(name, birthday) {
    this.name = name;
    this.birthday = birthday;
  }
  intro() {
    return `${this.name}, ${this.birthday}`;
  }
}
class Dzm extends Person {
  constructor(name, birthday) {
    super(name, birthday);
  }
}
let dzm = new Dzm('dzm', '2000-00-00');
console.log(dzm.intro()); // dzm, 2000-00-00

extends

class Person {
  constructor(name, birthday) {
    this.name = name;
    this.birthday = birthday;
  }
  intro() {
    return `${this.name}, ${this.birthday}`;
  }
}
class Dzm extends Person {
  constructor(name, birthday) {
    super(name, birthday);
  }
}
let dzm = new Dzm('dzm', '2000-00-00');
console.log(dzm.intro()); // dzm, 2000-00-00

super


  • super 关键字
    // 调用 父对象/父类 的构造函数 super([arguments]);
    // 调用 父对象/父类 上的方法 super.functionOnParent([arguments]);

Set

let strs = new Set();
console.log(strs); // Set(0) {}
let strs = new Set('dzm');
console.log(strs); // Set(3) {"d", "z", "m"}
let strs = new Set('dzm','xyq');
console.log(strs); // Set(3) {"d", "z", "m"}
let strs = new Set('dzm');
strs.add('xyq');
console.log(strs); // Set(4) {"d", "z", "m", "xyq"}
let strs = new Set('dzm');
// Set 里不能包含同样的数据
strs.add('xyq');
strs.add('xyq');
console.log(strs); // Set(4) {"d", "z", "m", "xyq"}
console.log(strs.size); // 4
console.log(strs.has('xyq')); // true
strs.delete('xyq'); // 移除
console.log(strs) // Set(3) {"d", "z", "m"}
strs.forEach(str => { // 遍历
  console.log(str);
})
strs.clear(); // 清空
console.log(strs) // Set(0) {}

Map

let map = new Map();
let d = {}, z = function () {}, m = 'dzm';
map.set(d, 'd');
map.set(z, 'z');
map.set(m, 'm');
console.log(map); // Map(3) {{…} => "d", ƒ => "z", "dzm" => "m"}
console.log(map.size); // 3
console.log(map.get(d)); // d
console.log(map.get(z)); // z
console.log(map.get(m)); // m
map.delete(d); // 删除
console.log(map.has(d)); // false
map.forEach((value, key) => { // 循环
  console.log(`${key} = ${value}`);
});
map.clear(); // 清空
console.log(map); // Map(0) {}

export,import ,export default是什么


  • ES6模块主要有两个功能:export和import
  • export用于对外输出本模块(一个文件可以理解为一个模块)变量的接口
  • import用于在一个模块中加载另一个含有export接口的模块。
  • 也就是说使用export命令定义了模块的对外接口以后,其他JS文件就可以通过import命令加载这个模块(文件)。这几个都是ES6的语法。
  • 上面讲的是export和import,但是export跟export default 有什么区别呢?如下: ○ export与export default均可用于导出常量、函数、文件、模块等 ○ 你可以在其它文件或模块中通过import+(常量 | 函数 | 文件 | 模块)名的方式,将其导入,以便能够对其进行使用 ○ 在一个文件或模块中,export、import可以有多个,export default仅有一个 ○ 通过export方式导出,在导入时要加{ },export default则不需要 ○ 这样来说其实很多时候export与export default可以实现同样的目的,只是用法有些区别。注意空白圆圈第四条,通过export方式导出,在导入时要加{ },export default则不需要。使用export default命令,为模块指定默认输出,这样就不需要知道所要加载模块的变量名。

export


  • 比如 Test.js 代码导出:

○ 单个导出


export let dzm = 'dzmdzmdzm';
export let xyq = 'xyqxyqxyq';

○ 多个导出

let dzm = 'dzmdzmdzm';
let xyq = 'xyqxyqxyq';
function test(dzm, xyq) {
    console.log(`${dzm}---${xyq}`);
}
export {dzm, xyq, test as supper}
// export {dzm, xyq, test}
// as 为修改别名,在外部使用新修改的名字,也可以不修改。

  • 外部代码使用:

○ 指定使用


import {dzm, xyq} from './Test';
import {dzm, xyq, supper} from './Test';
// import {dzm, xyq, supper as newName} from './Test';
// 使用这里也可以修改别名,看自己需求使用。

然后直接使用 dzm, xyq 或者 supper 属性即可。


调用方法

supper(dzm, xyq); // 输出 dzmdzmdzm---xyqxyqxyq

○ 全部使用

import * as test from './Test';

然后直接使用 test.dzm, test.xyq 属性即可。


export default


  • 请看文章上面的 「 export,import ,export default是什么 」方便认识好它们的区别。


  • 比如 Test.js 代码导出:


export default function test(dzm, xyq) { console.log(${dzm}---${xyq}); }


  • 外部接收


import test from './Test';


导出的 test 这里就默认相当于是 test(dzm, xyq) 方法,export default 导出的是什么它就代表是什么。我们可以直接这么使用

test('dzm', 'xyq'); // dzm---xyq

  • 还可以这样导出默认属性


function test(dzm, xyq) { console.log(${dzm}---${xyq}); } export {test as default};


这样导出的效果也是一致的。只要记住 通过export方式导出,在导入时要加{ },export default则不需要,因为它是默认的。


相关文章
|
Java
ES6 学习笔记一
ES6 学习笔记一
63 0
|
3月前
|
JavaScript 前端开发
ES6学习(6)
ES6学习(6)
|
3月前
|
网络架构
ES6学习(5)
ES6学习(5)
|
7月前
|
Java
es 学习笔记
es 学习笔记
45 1
|
机器学习/深度学习 边缘计算 运维
es学习笔记2-es组件
es学习笔记2-es组件
182 0
|
存储 JSON 安全
es学习笔记1-es概念
es学习笔记1-es概念
91 0
|
JavaScript 前端开发 编译器
ES6 从入门到精通 # 01:ES6 介绍
ES6 从入门到精通 # 01:ES6 介绍
136 0
ES6 从入门到精通 # 01:ES6 介绍
|
JSON API 数据格式
ES7学习笔记(三)新建索引
与ES的交互方式 与es的交互方式采用http的请求方式,请求的格式如下: curl -X '://:/?' -d '' 是请求的方法,比如:GET、POST、DELETE、PUT等。
2969 0
ES7学习笔记(三)新建索引
|
前端开发 JavaScript
ES6、ES7、ES8、ES9、ES10、ES11、ES12知识点总结(3)
ES6、ES7、ES8、ES9、ES10、ES11、ES12知识点总结(3)
ES6、ES7、ES8、ES9、ES10、ES11、ES12知识点总结(3)