一.构造函数
-
一般首字母大写
-
函数内部使用this赋值
-
function 大写字母开头的名词(特征){
this.属性名 = 特征;
…
} -
一般属性放在构造函数, 方法放在原型对象上
-
每次创建对象只要new下构造函数就行
二.原型对象
- 原型对象是一个js自动生成的对象
- 只要我们第一了一个函数js就会自动为它分配一个原型对象
- 可以通过函数的prototype属性访问函数的原型对象
- 可以解决构造函数造成的内存浪费问题
- 所有的实例都可以共享原型对象上的方法
- 利用原型对象可以给数组等原生类型添加方法
三. 构造函数, 原型对象, 实例的关系
- 构造函数.prototype === 原型对象
- 原型对象.constructor === 构造函数
- 实例对象.proto === 原型对象
四. 原型链
- 实例对象有原型, 原型也有原型. 它们构成一个祖辈的关系, 这个关系被称为原型链
- 原型链上游的方法可以被下游的实例所调用, 这个现象被称为继承
- 原型链的尽头是null
五. es5的继承
- 构造函数继承, 在构造函数里用call调用其他的构造函数实现继承, 缺点是方法在每个实力上都有会造成内存的浪费
- 原型链继承, 可以共享方法, 但没法实现实例的独有属性
- 组合继承, 既可以共享原型对象的方法又可以有自己的独有属性, 一般都用组合继承.
六. 所有的函数都是Function构造函数的实例
-
function f1(){};
var f2 = function(){}console.log(f1 instanceof Function); // true
console.log(f2 instanceof Function); // true -
var 函数名 = new Function(‘形参1’,‘形参2’,…形参N,‘函数体’);
七. 改变函数的this指向
- call, 用法 函数名.call(新this,参数1,参数2,参数3…); 改变this指向, 可以接受参数, 会立即调用函数
- apply 用法 函数名.aooly(新this,数组); 改变this指向, 接受一个数组参数, 立即指行
- bind 用法函数名.bind(新this,参数1,参数2,参数3…); 改变this指向, 接受多个参数, 返回一个函数, 可以调用这个函数并传递参数
八. 函数调用时的this指向
- 在全局下定义的函数, 直接用函数名调用, 普通模式下this指向window, 严格模式下this指向undefined
- 构造函数里this指向实例对象
- 时间处理程序, 比如onclick等, this指向时间源
- 作为对象的方法, this是实例对象
- .回调函数, 如setTimeout等, 一般是window, 也可能是其他的
- 箭头函数, this总是指向定义时所在的环境中的this
九. 闭包
-
闭包是指作用域延伸到了其他局部作用域的函数
-
比如下面这种,a被f2所使用,就形成了闭包
function fn(){ var a = 10; function f2(){ a++; } }
-
闭包最厉害的地方在于,可以让一个局部的数据,被外部所使用
-
闭包的坏处 闭包会破坏局部变量的生命周期. 局部变量一般就会在函数执行过后,就会被销毁。但是如果使用了闭包,会导致局部变量,会一直存在于内存中,直到浏览器关闭才会被销毁。
十. 递归
- 递归就是函数内部调用自己
- 内部要有结束条件
- 其他等等
十一 . class
-
class是es6用来声明类的关键字, 一种语法糖, 本质还是es5的组合继承
-
// 固定写法, 首字母要求大写 class 类名{ constructor(特征){ this.属性 = 特征 } 方法名(){ 函数体 } }
-
用extends 继承其他类
-
继承了其他类时如果定义了自己的constructor 要在constructor里先写super(), 不然会报错
-
类里面定义的属性在实例上, 方法一般在原型对象上, 如果是 fn = () => {}这样函数就会定义在实例上
十二 . 正则表达式
- 创建正则对象 构造函数方法 let reg = new RegExp(正则规则);
- 字面量方法 let reg = /正则规则/;
- 正则对象.test(字符串); 正则测试方法
- \d 匹配0-9数字
- \D 匹配非数字
- \w 匹配大小写字母数字下划线
- \W 匹配非数字字母下划线
- \s 匹配空白
- \S匹配非空白
- ^ 匹配开头
- $ 匹配结尾
- {n} 匹配某个规则出现n次
- {n, } 匹配某个规则出现n次以上
- {n, m} 匹配某个规则出现n~m次
- * 表示出现任意次
- + 表示出现至少1次
- ? 表示出现0次或一次
- | 表示连接或者的逻辑表达式
- g 全局模式
- i 忽略大小写