JavaScript第21天

1、保护对象:保护对象的属性和方法

        1、四大特征:

<script>
    }
    value:1001,//实际保存值的地方
    writable:true,//开关:控制着是否可以修改-默认值:都为true
    enumerable:true,//开关:控制着是否可以被for in循环遍历到-默认值:都为true
    configurable:true//开关:控制着是否可以被删除-默认值:都为true,总开关:一旦设置为false,其他特征不可以在修改,而且它本身也是一旦设置为false,不可逆
    }
</script>

        修改四大特征:

                1、         

<script>
    Object.defineProperty(对象名,"属性名",{
    修改四大特征
    })
    //调用一次方法只能保护一个属性的四大特征
</script>

                2、

<script>
    Object.defineProperties(对象名,{
    "属性名":{修改四大特征},
    ...
    })
    //至少方法只调用一次
    //四大特征甚至不能防止添加
</script>

        2、三个级别:

                1、防止扩展:防止添加

                        object.prenventExtensions(obj);

                2、密封:防止添加和删除

                        object.seal(obj);

                3、冻结:防止添加和删除和修改

                        object.freeze(obj);

                问题:问什么保护对象不重要?

                        1、如果一不用面向对象开发,那你没有对象可保护

                        2、别人一般来说不可能知道你取的对象的名字

                四大特性,其实应该是六大特性-可以帮我们做出动态数据

<script>
    Obiect.defineProperty(obj,"name",{
        get:()=>{
            console.log("获取数据会进行拦截");
        }.
        set:v=>{
            console.log("设置数据会进行拦截");
            v;//拦截到的新数据
            d1.innerHTML=v;
        }
    })
</script>

2、 对象的深浅拷贝

        1、浅拷贝

<script>
    var obj1={"name":"obj1"};
    var obj2=obj1;
</script>

        2、深拷贝

<script>
    var obj1={"name":"obj1"};
    var obj2={...obj1}
</script>

        3、如何脱掉后端传来的数据

                1、后端:var jsonText=JSON.stringify(obj1); - Node.js就是这句话,Node.js也是"js",历史上第一次一门语言可以通吃前后端

                2、前端:var jsonObj=JSON.parse(jsonText);

                //此方法也能实现深拷贝

3、Error对象

        1、工作/学习的目的

                1、快速找到错误

                2、记得要防用户

        2、浏览器自带4种错误类型:可以快速找到自己的错误

                1、语法错误:SyntaxError - 一定是你的符号写错了

                2、引用错误:ReferenceError - 没有创建就去使用了

                3、类型错误:TypeError - 不是你的方法,你却去使用了

                4、范围错误:RangeError - 只有一个API会碰到:num.toFixed(d);//d取值范围:0~100之间

        3、只要发生错误,就会报错,会导致后续代码终止(闪退)

                1、错误处理:就算发生错误,我们也不希望报错,而是给出一个错误提示,让后续代码可以继续执行

                语法:

<script>
    try{
        //只放入你可能出错的代码
    }catch(err){
        //发生错误后才会执行的代码
        alert(err);//err就是我们的错误提示:只不过是英文的
        alert("中文的错误提示,来提示用户");
    }
</script>

                 try...catch...的性能非常差,几乎是所有代码里最差的,放在try中的代码效率会被降到最低

                可以用一个技术代替他:分支结构

                开发经验:记住一切的客户端输入/用户输入都不一定会正确输入-你不必担心,只要你做好该做的防护就不会出错(!isNaN、正则)

                4、抛出自定义错误,只要是错误,后续代码都不会执行

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

                5、ES5:严格模式

                        开启:"use strict"; - 写在任何一个作用域的顶部都可以

                        作用:

                                1、禁止了全局污染,使用变量之前必须先创建变量

                                2、将静默失败升级为了错误

4、柯里化函数

<script>
    function add(a){
        return function(b){
            return function(c){
                console.log(a+b+c);
            }
        }
    }
    add(3)(5)(7)
</script>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值