1.this指向 [ 重点 ]
//1.全局中
window
//2.普通函数中
window
//3.对象方法中
当前对象
//4.事件处理函中
当前事件源
//5.构造函数中
实例对象
//6.计时器中
window
//7.箭头函数中
上一层作用域的对象
2.call\apply\bind三种方法的区别 [ 重点 ]
//call 和 apply
1.立即调用函数
2.都可以改变this指向
3.传参方式不同
4.语法
//函数.call(对象, 参数,参数);
//函数.apply(对象,[参数,参数]);
//bind
1.不是立即调用的函数
2.可以改变this的指向
3.函数调用bind后会返回一个新的函数
4.语法
//新函数 = 函数.bind(对象);
//新函数(参数,参数)
3.数据类型 [ 重点 ]
3.1 分类
//1.基本数据类型(原始数据类型)
number string boolean undefined null symbol
//2.引用数据类型(复合数据类型)
Object Number String Boolean Function Array Math Date RegExp...
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W08O0KJ2-1681660180301)(F:\H520221114\07-JS中级\2023-1-31-js-对象进阶-day2\resources\数据在内存分配.png)]
3.2变量拷贝
-
基本类型
拷贝的是 "值"
-
引用类型
拷贝的是 "地址"
-
深浅拷贝
//1.理解深浅拷贝: 将引用的类型"地址拷贝"转为数据的"值拷贝" //2.浅拷贝: 拷贝一层数据 1. Object.assign(目标对象, 源对象1, 源对象1) 2. for...in //3.深拷贝: "1.JSON两个核心方法缺陷" 1、如果obj里面存在时间对象,JSON.parse(JSON.stringify(obj))之后,时间对象变成了字符串。 2、如果obj里有RegExp、Error对象,则序列化的结果将只得到空对象。 3、如果obj里有函数,undefined,则序列化的结果会把函数, undefined丢失。 4、如果obj里有NaN、Infinity和-Infinity,则序列化的结果会变成null。 5、JSON.stringify()只能序列化对象的可枚举的自有属性。如果obj中的对象是有构造函数生成的, 则使用JSON.parse(JSON.stringify(obj))深拷贝后,会丢弃对象的constructor。 6、如果对象中存在循环引用的情况也无法正确实现深拷贝。 "2.使用递归函数实现深拷贝 === 手写" "3.使用第三库lodash"
4.类型检测 [重点]
4.1 typeof检测基本数据类型
//1.语法
typeof 值/变量;
typeof(值/变量)
//2.返回值
类型字符串
4.2 instanceof检测引用数据类型
//1.语法
变量 instanceof 构造函数
//2.理解
判断变量值是否是由构造函数实例化的对象
//3.返回值
布尔值
4.3 Object.prototype.toString()实现完美检测数据类型
//1.语法
Object.prototype.toString.call(检测的数据)
//2.返回值
字符串: [object Number] [object Array]
5.es5类的继承 [ 了解 ]
//1.继承
子类继承父类的所有属性和方法
//2.为什么要使用继承
减少代码冗余
//3.写法
/**
* 寄生组合式继承
*/
//父类
function Father(name, age) {
//私有属性: 挂到实例对象
this.name = name;
this.age = age;
}
//父类原型方法: 共享方法: 挂原型上
Father.prototype.chang = function () { }
Father.prototype.tiao = function () { }
//子类
function Son(name, age, fav) {
//1.继承父类的属性: 把父类属性挂到子类实例对象上
Father.call(this, name, age)
this.fav = fav;
}
//2.继承父类原型方法
Son.prototype = Object.create(Father.prototype);
//3.还原子类构造器
Son.prototype.constructor = Son;
//子类原型方法
Son.prototype.study = function () { }
//实例化子类对象
const s1 = new Son('小明', 20, 'rap')
console.log(s1);
.还原子类构造器
Son.prototype.constructor = Son;
//子类原型方法
Son.prototype.study = function () { }
//实例化子类对象
const s1 = new Son('小明', 20, 'rap')
console.log(s1);