es6重点 函数默认值 对象简写和对象方法简写 函数默认值 解构 set()去重 函数的四种调用模式 call()es5原型链 异步和同步 异步 同步

104 阅读4分钟

es6重点

es6的class 的出现 基本上可以替代了es5的构造函数和原型,使之代码结构上更加简洁。

  1. class

  2. 属性

  3. 方法

  4. 继承 extends

  5. 构造函数 constructor

  6. 方法重写 override:子类方法覆盖父类,super.父类方法()

  7. 父类的构造函数 super :子类有构造方法且使用this前,必须使用super()

1651130432103.png 0. es6 属性的定义 写法有两种

1 直接在构造函数内 constructor this.name=name

2 可以写在 大括号内

1651132542323.png

函数默认值

你好默认值+>

function show(msg = '你好', str = "你我都好") {

console.log(msg, str);

}

// 输入实参我就替换 没有我就输出我自己(默认)

show(); // 没有传递参数 输出你好 你我都好

show('大家好'); // 输出 大家好 你我都好

show('大家好', "世界美好"); // 输出 大家好

对象简写和对象方法简写

1 变量名如果和你的对象的属性名一致 可以简写

let username='悟空'

const obj = { username }

2 对象的方法 简写

const obj ={

say(){ // 简写的方法

}

}

1651126994972.png1651126694638.png

函数默认值

定义函数的同时,可以给形参一个默认值

1651127116759.png

解构

提供更加方便获取数组中元素或者对象中属性的写法

1651127180092.png

获取数组中的元素

1651127273014.png

元素交互顺序

1651127296028.png

获取对象中的属性

1651127588787.png

拓展运算符 || 剩余运算符

通过 ...符号来获取剩下的参数

函数内 数组内 对象内获取

1651127745489.png

set()去重

理解

永远不会有重复元素的对象

可以理解为不重复的数组

1 set对象 是es6 才推出

2 主要的功能 去重处理

set.add(1);

3 set是一个对象,不是一个数组!!

4 实现 使用set转成数组的时候,需要考虑 (set对象转-数组 数组 - 转成对象)

数组 - 转成对象 new Set(beforeArr)

set对象转-数组 const arr=[...set];

语法

1651127876696.png

1651164287183.png

函数的四种调用模式

1.函数调用模式

如果一个函数不是一个对象的属性时,就是被当做一个函数来进行调用的。此时this指向了window

1651129840174.png

2.方法调用模式

当一个函数被保存为对象的一个属性时,我们称之为一个方法。当一个方法被调用时,this被绑定到当前对象

const obj = {
  sayHi:function(){
    console.log(this);//在方法调用模式中,this指向调用当前方法的对象。
  }
}
obj.sayHi();

3.构造函数调用模式

如果函数是通过new关键字进行调用的,此时this被绑定到创建出来的新对象上。

function Person(){
  console.log(this);
}
Person();//this指向什么?
var p = new Person();//this指向什么?

4.方法借用模式

也叫上下文模式,分为 apply 与 call

call()

call方法可以调用一个函数,并且可以指定这个函数的this指向

    const RichWumon = {
      name: "富婆",
      say: function () {
        console.log(this.name, " 我要重金求子");
      }
    }
​
    const obj = {
      name: "屌丝"
    }
​
    RichWumon.say();            // 富婆
    RichWumon.say.call(obj);    // 屌丝

call应用

  1. 将伪数组转成数组
    let divs = document.querySelectorAll('div');
    // let divs = document.body.children;
    console.log(divs);
​
    function change(nodelist) {
        console.log(Object.prototype.toString.call(nodelist));
        return Array.prototype.slice.call(nodelist);
​
    }

apply

就是apply()方法接受的是一个包含多个参数的数组。而call()方法接受的是若干个参数的列表

可以利用apply 将 刚才的call 的代码修改一下

    const RichWumon = {
      name: "富婆",
      say: function () {
        console.log(this.name, " 我要重金求子");
      }
    }
​
    const obj = {
      name: "屌丝"
    }
​
    RichWumon.say();            // 富婆
    RichWumon.say.apply(obj);   // 屌丝

apply应用

1.简化log方法

    // 简化log方法
    function log() {
        // 不需要改变this
        console.log.apply(console, arguments);
    }

bind方法

bind() 方法创建一个新的函数, 可以绑定新的函数的this指向

var name = '张三';
function Fn(){
    this.age = 1;
    
    console.log(this.name + this.age);
}
​
Fn();           // 张三 1
​
// 返回值:新的函数
// 参数:新函数的this指向,当绑定了新函数的this指向后,无论使用何种调用模式,this都不会改变。
let obj = {
    name:'小强',
}
const newFn = Fn.bind(obj);
newFn();        // 小强 1

1 创建数组的方式 有两种

const arr = ['a', 'b', 'c']; // 字面量 常用-直接和简单的写法

2 数组 也是可以被new

const arr = new Array('a', 'b', 'c');

console.log(arr);

es5原型链

原型链prototype

一个对象 它可以通过 prototype 来 找到被它继承父亲的方法

如果一个对象从底层触发 可以通过 prototype 一层一层往上找到 继承的关系 = 原型链

作用

1 如果我需要给 某个数据 (字符串、数组、对象) 统一添加一个方法 ,可以直接在原型上添加

2 初学者 不要乱在原型上定义方法 - 影响巨大

备注:DNA 存在于你整个家族 不只是父亲和儿子

1651132740915.png

异步和同步

异步

1 代码是执行, 但是结果不会马上得到

1 你寄出一封信 信 马上到 目的人手中

2 你妈妈出门喊你回家吃饭, 你马上就回到家了

3 你刚刚做上出租车, 你马上到家了?

2 可以同时做多件事

1 你现在再大街上 和 三个大妈在吵架

每一个人 同时在输出 - 你先骂我 - 你骂我了

同步

1 代码是执行了,但是结果会马上得到

1 你同桌 给你一拳 马上就会感觉到痛

2 饮水机大水 一按下按键 水出来

3 你现在把你加 电源开关关掉 立马就断网

2 按顺序一件一件做事

1 核酸检查

排队的一个人一个人在进行