ES5 特性学习笔记

ES5 特性学习笔记

1、严格模式

在严格的条件下运行JavaScript

  1. 声明:“use strict”;
  2. 优势:
    • 消除代码不安全之处,保证代码的安全性。
    • 提高编译效率,增加运行速度
    • 为以后JavaScript做好铺垫
  3. 要求:
    • 不允许使用未声明的变量
    • 不允许删除变量、对象和函数,以及不能删除的不允许删的属性
    • 不允许变量重名
    • 不允许使用八进制
    • 不允许使用转义字符
    • 不允许对只读属性赋值
    • 不允许使用getter获取的属性进行赋值
    • 变量名不能使用eval\arguments
    • 禁止this指向全局对象
    • 新增一些保留字
      implements interface let package private protected public static yield

2、json

  1. JSON.parse
    • 将文本转化为JavaScript对象
  2. JSON.stringif
    - 将JavaScript转化为JSON格式字符串

3、对象方法

  1. 添加或者更改对象属性
    Object.defineProperty(object,property,descriptor)
  2. 添加或者修改多个对象属性
    Object.defineProperties(object,descriptors)
  3. 访问属性
    Object.getOwnPropertyDescriptor(object,proper5ty)
  4. 以数组形式返回所有属性
    Object.getOwnPropertyNames(object)
  5. 以数组的形式返回所有可枚举的属性
    Object.keys(object)
  6. 访问原型
    Object.getPrototypeOf(object)
  7. 阻止对象添加属性
    Object.preventExtensions(object)
  8. 判断是否可添加属性到对象
    Object.isEXtensions(object)
  9. 防止更改属性
    Object.seal(object)
  10. 防止对象进行任何修改
    Object.freeze(object)
  11. 遍历对象 for in

4、四大数据属性

writable 只读性(是否可修改)
enumerable 可遍历性
configurable 是否可更改配置
value 属性值

5、get以及set方法

  • getter:
    get(){}//当对象获取属性值时调用
  • setter:
    set(){}//当对象设置属性值时调用

6、数组方法

  1. indexOf
  2. astIndexOf
  3. every
    判断数组中元素是否都满足条件 返回布尔值
  4. some
    判断数组中元素是否有满足条件的元素,返回布尔值
  5. forEach
    对每个数组元素调用一次函数(类似for循环)
  6. map
    操作每个数组元素,返回新数组
  7. filter
    过滤器,返回满足条件的元素组成的新数组
  8. isArray
    - 判断是否为数组
    - 本质原理:
    Object.prototype.toString.call(val)
    - 其他方法
    obj instanceof Array 判断原型链上
    obj.constructor ===Array 判断原型上
  9. reduce
    计算数组总和
    	arr.reduce((pre,next)=>{
            return pre+next;
        })
    
  10. reduceRight

7、实现继承

  1. 原型链继承
 function  SuperType(){ 
  }
  function SubType(){ 
  }
  SubType.prototype = new SuperType();

原型属性以及方法会被所有实例共享,修改其中一个实例原型中的值,将会使所有都修改。
子类不能像超类传参

  1. 借用构造函数继承
 function SuperType(){ }
    function SubType(){ 
        //继承了 SuperType 
        SuperType.call(this); 
    }

无法继承超类原型里的属性与方法;方法都在构造函数中定义,函数无法实现复用。

  1. 组合继承

        将原型链与借用构造函数结合使用
    
function SuperType(){ }
function SubType(){ 
    //继承了 SuperType 
    SuperType.call(this); 
}
SubType.prototype = new SuperType();
SubType.prototype.constructor = SubType

需要调用两次超类

  1. 原型式继承
  function object(o){
      function F(){};
      F.prototype = o; //复制了一份对象放于原型中
      return new F();
  }

ES5通过新增Object.create()方法规范了原型式继承
两个参数 第一个:用作新对象原型的对象,第二个:额外属性的对象
与原型一样,原型对象被所有实例共享

  1. 寄生式继承

    与原型式继承密切相关。在原型式继承外加一层函数

function createAnother(original){
  var clone = object(original);
  clone.key = val //设置额外属性
  return clone;
}

不能做到函数复用

  1. 寄生组合式继承
function inheritPrototype(SubType,SuperType){
    var prototype = object(SuperType.prototype)
    prototype.constructor = SubType;
    SubType.prototype = prototype
}
function SuperType(){ }
function SubType(){ 
    //继承了 SuperType 
    SuperType.call(this); 
}
inheritPrototype(SubType,SuperType)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值