JS 第五章

42 阅读2分钟

一、保护对象

1.每个属性都有六大特性:可以操作


       Object.defineProperties(obj,{
        "属性名":{
        value: 实际存储值的位置,
        writable: true/false,开关,控制着是否可以被修改
        enumerable: true/false,开关,控制着是否可以被for in遍历到
        configurable: true/false,开关,控制着是否可以被删除,还是一个总开关,一旦改为false,其他特性不可以在修改,一旦改为false,而且不可逆
        get:()=>{只要获取数据的时候就会触发,拦截到数据},
        set:()=>{只要设置数据的时候就会触发,拦截到数据,可以做出动态数据},
        }
        })

2.三个级别:


   	1、防扩展:Object.preventExtensions(obj);
    	2、密封:Object.seal(obj);
    	3、冻结:Object.freeze(obj);

二、对象的深浅拷贝

1、浅拷贝:利用按值传递

        var obj1={};
        var obj2=obj1;

2、深拷贝:两者长得一样,但是互不影响

           var obj1={};
        var obj2={...obj1}
        var obj3=JSON.parse(JSON.stringify(obj1));

三、Error对象

1、浏览器自带4种错误类型:

    1、语法错误:SyntaxError
    2、引用错误:ReferenceError
    3、类型错误:TypeError
    4、范围错误:RangeError - 只有一个API会遇到num.toFixed(0\~100)

2、错误处理:因为报错后导致后续代码中断,我们不希望这个事情发生


    try{
    		可能出错的代码
    	}catch(err){
    		err - 错误消息,但是可能是英文的
    	}

    	try...catch性能低下,我们用分支去代替它

3、抛出自定义错误:

  throw new Error("自定义错误消息");

4、ES5 - 严格模式

    "use strict";

    	作用:
    		1、禁止了全局污染
    		2、将静默失败升级为报错

补:

  1. 柯里化函数:方法名()()()(); 说明函数里面在不断的return出函数我们才能不断的调用

  2. 回调函数:没有名字的函数:

    (1)自调:只能执行一次,好处:代替掉全局写法,函数中【没用的变量】会自动释放 (function(){ 操作 })();

    (2)回调:匿名函数不是自调,就是回调,往往都是前辈们创建好了,我们学习如何使用,一切的回调都可以简化为箭头函数(一定要学会考虑this)

3.设计模式:编程思想

(1)单例模式:一个类只能创建一个对象

(2)观察者(订阅-发布)模式:一个发布,所有的订阅者都可以看到

4.事件轮询:因为JS默认是单线程应用,代码只能从上向下慢慢执行

(1)宏任务(异步代码):可以让后续代码先做,我们复杂的代码慢慢来,但是多个宏任务同时出现,无法确定先后顺序

   1、定时器
   2、ajax

(2)微任务:Promise对象

new Promise(ajax1).then(ajax2).then(ajax3);

注意:
        1Promise中的回调函数一定要放行,下一个才会执行
        2、想要连续的.then出去前一个返回的是一个Promise对象