js进阶总结

一.构造函数

  1. 一般首字母大写

  2. 函数内部使用this赋值

  3. function 大写字母开头的名词(特征){
    this.属性名 = 特征;

    }

  4. 一般属性放在构造函数, 方法放在原型对象上

  5. 每次创建对象只要new下构造函数就行

二.原型对象

  1. 原型对象是一个js自动生成的对象
  2. 只要我们第一了一个函数js就会自动为它分配一个原型对象
  3. 可以通过函数的prototype属性访问函数的原型对象
  4. 可以解决构造函数造成的内存浪费问题
  5. 所有的实例都可以共享原型对象上的方法
  6. 利用原型对象可以给数组等原生类型添加方法

三. 构造函数, 原型对象, 实例的关系

  1. 构造函数.prototype === 原型对象
  2. 原型对象.constructor === 构造函数
  3. 实例对象.proto === 原型对象

四. 原型链

  1. 实例对象有原型, 原型也有原型. 它们构成一个祖辈的关系, 这个关系被称为原型链
  2. 原型链上游的方法可以被下游的实例所调用, 这个现象被称为继承
  3. 原型链的尽头是null

五. es5的继承

  1. 构造函数继承, 在构造函数里用call调用其他的构造函数实现继承, 缺点是方法在每个实力上都有会造成内存的浪费
  2. 原型链继承, 可以共享方法, 但没法实现实例的独有属性
  3. 组合继承, 既可以共享原型对象的方法又可以有自己的独有属性, 一般都用组合继承.

六. 所有的函数都是Function构造函数的实例

  1. function f1(){};
    var f2 = function(){}

    console.log(f1 instanceof Function); // true
    console.log(f2 instanceof Function); // true

  2. var 函数名 = new Function(‘形参1’,‘形参2’,…形参N,‘函数体’);

七. 改变函数的this指向

  1. call, 用法 函数名.call(新this,参数1,参数2,参数3…); 改变this指向, 可以接受参数, 会立即调用函数
  2. apply 用法 函数名.aooly(新this,数组); 改变this指向, 接受一个数组参数, 立即指行
  3. bind 用法函数名.bind(新this,参数1,参数2,参数3…); 改变this指向, 接受多个参数, 返回一个函数, 可以调用这个函数并传递参数

八. 函数调用时的this指向

  1. 在全局下定义的函数, 直接用函数名调用, 普通模式下this指向window, 严格模式下this指向undefined
  2. 构造函数里this指向实例对象
  3. 时间处理程序, 比如onclick等, this指向时间源
  4. 作为对象的方法, this是实例对象
  5. .回调函数, 如setTimeout等, 一般是window, 也可能是其他的
  6. 箭头函数, this总是指向定义时所在的环境中的this

九. 闭包

  1. 闭包是指作用域延伸到了其他局部作用域的函数

  2. 比如下面这种,a被f2所使用,就形成了闭包

    	function fn(){
    	  	var a = 10;
    	  	function f2(){
    	   	 a++;
    	  	}
    	}
    
  3. 闭包最厉害的地方在于,可以让一个局部的数据,被外部所使用

  4. 闭包的坏处 闭包会破坏局部变量的生命周期. 局部变量一般就会在函数执行过后,就会被销毁。但是如果使用了闭包,会导致局部变量,会一直存在于内存中,直到浏览器关闭才会被销毁。

十. 递归

  1. 递归就是函数内部调用自己
  2. 内部要有结束条件
  3. 其他等等

十一 . class

  1. class是es6用来声明类的关键字, 一种语法糖, 本质还是es5的组合继承

  2. // 固定写法, 首字母要求大写
    class 类名{
    constructor(特征){
        this.属性 = 特征
    }
       方法名(){ 函数体 }
    }
    
    
  3. 用extends 继承其他类

  4. 继承了其他类时如果定义了自己的constructor 要在constructor里先写super(), 不然会报错

  5. 类里面定义的属性在实例上, 方法一般在原型对象上, 如果是 fn = () => {}这样函数就会定义在实例上

十二 . 正则表达式

  1. 创建正则对象 构造函数方法 let reg = new RegExp(正则规则);
  2. 字面量方法 let reg = /正则规则/;
  3. 正则对象.test(字符串); 正则测试方法
  4. \d 匹配0-9数字
  5. \D 匹配非数字
  6. \w 匹配大小写字母数字下划线
  7. \W 匹配非数字字母下划线
  8. \s 匹配空白
  9. \S匹配非空白
  10. ^ 匹配开头
  11. $ 匹配结尾
  12. {n} 匹配某个规则出现n次
  13. {n, } 匹配某个规则出现n次以上
  14. {n, m} 匹配某个规则出现n~m次
  15. * 表示出现任意次
  16. + 表示出现至少1次
  17. ? 表示出现0次或一次
  18. | 表示连接或者的逻辑表达式
  19. g 全局模式
  20. i 忽略大小写
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值