变量的进阶

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. 引用类型

    拷贝的是 "地址"
    
  3. 深浅拷贝

    //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里有NaNInfinity-Infinity,则序列化的结果会变成null5JSON.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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值