事件的取消绑定、this、es5、es6

74 阅读2分钟

事件的取消绑定

  • 如果你使用elem.onclick=()=>{},那么elem.onclick=null
  • 如果你使用elem.addEventListener("事件名",回调函数); 那么:elem.removeEventListener("事件名",回调函数); - 事件名和回调函数,必须和添加时的一模一样

this的指向

  • 单个元素绑定事件this->这个元素
  • 多个元素绑定事件this->当前元素
  • 箭头函数中的this->外部对象
  • 函数中的this->当前正在调用函数的这个人
  • 定时器的this->window

ES5强制改变this的指向

call/apply

  • 临时的替换了函数的this - 借用

语法

  • 函数名.call(借用的对象,实参,...); - 单独传入每个实参
  • 函数名.apply(借用的对象,arr); - 只能传入一个实参要求是一个数组,apply其实会悄悄的打散数组

强调

  • call/apply:相当于立刻调用函数,立即执行的

bind

  • 永久替换了函数中的this - 买

3件事

  • 创建了一个和原函数功能完全相同的新函数
  • 将新函数的this永久绑定为了指定对象,别人都借不走
  • 将新函数的部分参数永久固定

语法

  • var 新函数=函数名.bind(永久对象,永久实参,...); - 不是立刻执行,需要自己调用

强调

  • bind绑定的新函数没办法被call/apply再次借走

三个固定套路

  • Math.max/min.apply(Math,arr) - 也能支持数组参数
  • Object.prototype.toString.call/apply(x)==="[object Array]";//判断xx是不也是一个数组
  • 类数组转为普通数组
    • 接住=Array.prototype.slice.call/apply(类数组对象)
    • 接住=Array.from(类数组对象)

ES6

let、const关键字、箭头函数

模板字符串

  • 可以直接识别变量,不再需要+运算去拼接了,而且实现了一个简单的js环境,甚至支持再里面书写API
    `我的名字叫${name}`
    

解构赋值

  • 解析结构再进行赋值 - 赋值的新方式,并且得到了增强
  • 如果赋值符号,左右两边的结构一样的,就会悄悄的解开/脱掉结构再一一的进行赋值

语法

  • 类似数组的解构赋值:let [a,b,c]=[1,2,3];

  • 类似对象的解构赋值:let {a,b=默认值,c}={c:3,a:1,b:2};//形参可以设置默认值,如果自己传入了,就用自己的

  • 调用函数时,传递实参的顺序无所谓了

    function zwjs({name,age,hobby="女"}){
            return `我的名字叫${name},今年${age}岁,喜欢${hobby}`;
    }
    
  • 函数的返回的结果,可以有多个

    function f1(){
            var a=1;
            var b=2;
            return [a,b];
    }
    var [a,b]=f1();
    //只要以后见到:方法名({里面放着键值对就是使用了ES6的解构赋值})
    

Set和Map新的数据类型

  • Set:类似于数组的一种数据格式 - 【去重数组,然后再转回数组】

    var s=new Set(arr);
    ...s - 三个点扩展运算符,可以脱掉数组的外套
    一句话完成:[...new Set(arr)]
    
  • Map:类似于对象的一种数据格式

    • var m=new Map();
    • 添加:m.set("键","值");
    • 获取:m.get("键");
    • 清空:m.clear();
    • 删除:m.delete("键");

新的循环for of

for(var v of arr){
	v;
}
  • 缺陷
    • 没有提供过下标,意味着不能修改原数组
    • 只能遍历索引数组,不能遍历hash数组,意味着也不能遍历对象