• JS 13


    1. *****ES5

      对对象的保护:

         对单个属性的保护:

             数据属性:

             访问器属性:

    对对象的保护:

       问题: 属性可随时直接用=赋值任何值

                属性可随时被访问

                可随时添加和删除属性

                ——不严格!

       解决: 对对象提供保护:

      

       如何:

         1. 对对象的属性提供保护

             将对象的属性分两大类:

                1. 命名属性: 可随时通过.属性名方式访问的属性

                      又分为2类:

                         1. 数据属性: 实际存储属性值的属性

                             如何保护: 每个属性都包含四大特性:

                                {

                                  value: 实际存储属性值,

                                  writable: true/false, //是否可修改

                                  enumerable: true/false,//是否可for in遍历

                                        //依然可用.访问到

                                  configurable: true/false,

                                      //1. 是否可修改前两个特性

                                      //2. 是否可删除当前属性

                                      //一旦改为false,不可逆!

                                 }

                            特殊: 如果要定义的属性不存在:

                               defineProperty会自动添加:

                                   自动添加后,属性的特性值都为false

                            问题: 只能提供基本(只读,遍历,删除)保护

                                    无法按照自定义规则保护属性

                            解决:

                         2. 访问器属性: 不实际存储属性值

                                                专门对其它属性提供验证保护

                             何时: 只要按照自定义规则保护属性

                             如何: 也有四大特性:

                                {

                           get:function(){return 受保护的属性值},

                                   set:function(val){

                                       验证要赋的新值val

                                       验证通过才将val保存到受保护的属性中

                                   },

                                   enumerable:true/false,

                                   configurable:true/false,

                                }

                             当通过访问器属性获取受保护的属性值时

                                    自动调用get方法

                             当通过访问器属性为受保护的属性赋值时

                                    自动调用set方法

                                        参数val,自动获得要赋的新值

                             大问题: 受保护的属性值应该保存在哪儿?

                                          才能做到比人不能直接用,只能通过访问器属性访问

                             解决: 闭包!

                2. 内部属性: 无法通过.属性名方式访问到的属性

                      class    Object.prototype.toString.call(obj)

                      __proto__  Object.getPrototypeOf(obj)

                                        Object.setPrototypeOf(child,father)

         2. 对整个对象提供保护

    1. *****ES5

      对对象的保护:

        对属性的保护

        防篡改

      Object.create();

      数组API:

    *****bind()

    1. 对对象的保护:

       对属性:

         命名属性

            数据属性:

            访问器属性:

               大问题: 受保护的属性值应该保存在?

               解决: 闭包

         内部属性

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

         3个级别:

         1. 防扩展: 禁止向对象中添加新属性

             Object.preventExtensions(obj)

         2. 密封: 即防扩展,又禁止删除旧属性

             Object.seal(obj)

                其实是将所有属性的configurable设置为false

         3. 冻结: 即密封,又禁止修改所有属性值!

              何时: 如果一个对象中保存了大量不变的属性值时

                 Object.freeze(obj);

                 其实是将所有属性的writable设置为false!

    2. Object.create():

       var newObj=Object.create(father,{扩展的新属性})

        创建一个新对象newObj,继承father,并为newObj扩展新的自有属性

       何时: 只要继承一个现有对象,创建一个新的子对象时

       相当于: var newObj={};

                   newObj.__proto__=father;

                   Object.defineProperties(newObj,{

              扩展的新属性

                   })

    3. 数组API:

       1. 判断: 数组中的元素是否符合要求

          1. 所有元素是否都符合要求

              var bool=

             arr.every(function(val,i,arr){ return 判断条件 })              2. 是否包含符合要求的元素

              var bool=

                   arr.some(function(val,i,arr){ return 判断条件 })

       2. 遍历API: 依次对数组中每个元素执行相同的操作

          1. 对原数组中每个元素执行相同的操作,结果保存回原数组

            arr.forEach(function(val,i,arr){  arr[i]=新值;  });

          2. 取出原数组中每个元素的值,执行相同的操作后,保存到一个新数组中

            var newArr=arr.map(function(val,i,arr){ 

                return 操作后的元素值

            });

       3. 过滤和汇总:

           过滤: 选择原数组中符合条件的元素,组成新数组

           var subArr=arr.filter(function(val,i,arr){

              return 判断条件;

           });

           汇总: 将原数组中每个元素统计出一个汇总结果

             var r=arr.reduce(function(prev,val,i,arr){

                 return prev+val;

             },0);

             其中: 0: 表示初始值

                      prev: 截止到目前的阶段汇总值

                      回调函数的返回值,自动作为下次的prev值

  • 相关阅读:
    JavaScript系列:JavaScript简介
    Fit自适应布局
    JavaScript数值类型及变量
    表格列Column
    JavaScript系列:ECMAScript引用类型
    Absolute绝对定位
    JavaScript系列:ECMAScript运算符
    JavaScript系列:ECMAScript类型转换
    jQuery Uploadify在ASP.NET MVC3中的使用
    JavaScript系列:ECMAScript语句
  • 原文地址:https://www.cnblogs.com/Hale-Proh/p/7199665.html
Copyright © 2020-2023  润新知