07 JS CORE ES5、bind

正课:
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值

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值