this关键字
严格模式
深拷贝/浅拷贝
this关键字
1.定义:函数内this指向是(调用/创建对象)时确认的,一般称为调用者
函数 | 调用者 | this指向 |
---|---|---|
普通函数 | window | window |
定时器函数/回调函数 | window | window |
DOM监听器函数/回调函数 | 获取的DOM对象 | 获取的DOM对象 |
立即执行函数 | window | window |
构造函数 | 实例对象 | 实例对象 |
对象中的方法 | 本身实例对象点方法调用 | 实例对象 |
2.定义上述6中函数都可以改变this指向
函数方法 | 是否调用函数 | 返回值 | 参数 |
---|---|---|---|
call | 是 | 函数return值 | 单个 |
apply | 是 | 函数return值 | 数组 |
bind | 否 | 将原函数修改this,拷贝后的新函数,需要调用时,需要赋值后调用 | 单个 |
1.call主要用途:继承,参数为单个
函数名.call(函数名中this指向新的对象名,参数1,参数2)
2.apply方法主要用途:继承,参数为数组
函数名.apply(函数名中this指向新的对象名,[数组/伪数组])
举例:Math.max.apply(Math,[ ])借助math数学内置对象,求数组最大值/最小值等
3.(最常用)bind方法主要用途:改变回调函数this指向
回调函数名.bind(函数名中this指向新的对象名,参数1,参数2)
举例:嵌套函数/回调函数,例如定时器结束后关闭xx,不用另外变量修改this即可;
严格模式
//开启严格模式
1."use strict" //script最上面/函数最上面
2.`use strict`//script最上面/函数最上面
1.支持ie10以上
2.关键字不能作为变量名:eg(class,enum,export,extends,import,super)
3.隐式全局变量会报错
4.命名变量要用delete删除会报错: delete lzy;
5.函数:同一函数不能有重复命名行参
6.块级作用域例如if,for内不允许写函数
7.this:全局作用域this指向undefined
8.函数内this指向报错,构造函数不存在静态成员
9.定时器内this指向window
深拷贝/浅拷贝:拷贝对象
1.浅拷贝
1.Object.assign(新对象,旧对象名称)
2.算法:for in循环原对象,赋值给新对象 (for in 对象a b[k]=a[k])
原对象方法/属性改变,新对象也跟着改变
新对象方法/属性改变,原对象也跟着改变
(浅拷贝属性一同变吗?????)
2.深拷贝