严格模式

严格模式

什么是:比普通运行机制更严格的模式

为什么:js中存在很多广受诟病的缺陷

              允许给未声明的变量赋值

              静默失败(一句话没有执行成功但是也不报错)

何时:今后所有项目必须在严格模式下开

如何:在当前代码片段的顶部添加"use strict"

          在两个范围启用严格模式:

         1.在全局  新项目必须在全局启用严格

         2.仅在函数内部   旧项目向严格模式迁移

要求:禁止给未声明的变量赋值。将所有静默失败升级为错误

保护属性

为什么:在传统的js中,对象的属性值和结构可以随意更改,毫无自保和验证能力

何时:今后所有的对象,都要被严格规定保护

ES5中的变化:

对象的属性也还是一个小的对象

对象的属性,包含四大特性

{

value:属性值

writable:true/false 控制是否可以修改属性

enumerable:true/false  控制是否可用for in遍历到该属性,仅控制for in遍历,用.依然可以访问到

configurable:true/false   控制禁止修改该属性    禁止修改其他特性的值    一旦改为false,不可逆,因此今后只要修改其他特性,都要伴随修改configurable为false,双保险

}

如何:

获取属性的四大特性

修改属性的四大特性

Object.defineProperty(obj,"属性名",{

    writable: false,

    enumerable:false,

    configurable:false

})

问题:Object.defineProperty每次只能修改一个属性

解决:

Object.defineProperties(obj,{

    属性名:{

        特性名:值,

        特性名:值,

        ...

    },

    属性名:{

        特性名:值

    }

})

问题:普通属性的四大特性,只能提供基本的保护,无法使用自定义规则保护属性

解决:用访问器属性

访问器属性:

ES5将对象的属性分为:数据属性和访问器属性

数据属性:直接存储属性值的属性

访问器属性:不直接存储数据,仅提供对其他数据属性的保护

为什么:数据属性只能对自己提供基本的保护,无法使用自定义的逻辑保护自己

何时:只要用自定义属性保护数据属性时,就只能用访问器属性

如何:2步

           1.首先定义一个隐藏的实际存储数据的数据属性

            2.然后定义访问器属性保护数据属性

使用访问器属性:用法和普通数据属性完全一样

防篡改:禁止修改对象的结构

三个级别:

1.防扩展:禁止对对象强行添加新属性

Object.preventExtensions(obj)

原理:对象都有一个内部属性:extensible,默认为true。preventExtensions其实是将extensible改为false

2.密封:在防扩展的同时,在禁止删除所有属性

Object.seal(obj);

原理:将所有属性的configurable特性都改为false

3.冻结:在密封的同时,在禁止修改所有的属性值

何时:如果一个对象连属性值都不让随便改,就要冻结

如何:Object.freeze(obj);

原理:将所有属性的writable特性改为false

Object.create:

三件事:基于现有的父对象,创建一个子对象,在扩展新属性

何时:只有一个父对象没有构造函数时,也想创建子对象

如何:

var child = Object.create(father,{

属性名:{

特性名:值

...:...

},

});

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值