45闭包 原型对象 继承

45闭包 原型对象 继承

一、闭包

在函数外部能够读取其他函数内部变量的函数

通俗理解的闭包:一个内部函数引用了外部函数的变量,外部函数形成了一个闭包

function fn1(){
    let n = 1
    function fn2(){
        console.log(n)
    }
    // fn2就是一个闭包函数
    return fn2
}
// res就是fn1函数运行的返回值是fn2函数
let res = fn1()
// 调用函数fn2
res()

原理

js中的变量,函数在执行的时候会被加载到栈中,执行完毕再弹出,当使用闭包的时候,函数执行完成后,不会弹出,因为其他的地方还要加载其内部变量

特点

- 使用不当会很容易造成内存泄漏(内存中能存的东西原来越少,像是其他部分被泄露了一样)

- 设置私有变量(内部函数调用外部函数的局部变量,此时,这个局部变量就会变成内部函数的私有变量)

- 闭包的作用	减少变量的声明,避免造成污染

- 内存的占用比较到,浪费内存

二、原型对象

创建的每个函数都有一个protrtype属性。通过这个属性能够找到原型对象,实例化对象也都有一个__proto__属性,实例化对象通过这个属性找到原型对象

使用原型对象的好处就是能够将一些公共的方法设置在原型对象,所有的对象实例都能使用这些方法

原型链继承

利用原型让一个引用类型继承另一个引用类型的方法

每一个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针

原型链的连接点是__proto__

在这里插入图片描述

三、call/apply继承

都是改变this的指向,只是传参的形式不同

call

- 作用	调用该函数,并修改函数中的this指向

- 语法	函数名.call(对象, 实参1, 实参2)

第一个参数是this需要指向的对象
后面的参数都是被调用函数需要传入的实参

apply

- 作用	调用该函数,并修改函数中的this指向

- 语法	函数名.apply(对象, 数组)

第一个参数是this需要指向的对象
第二个参数是将需要传入的实参写在一个数组里

bind

- 作用	不调用函数,克隆一个新的函数,并修改新函数中的this指向,将新的函数返回

- 语法	函数名.bind(对象, 实参1, 实参2)

第一个参数是this需要指向的对象
后面的参数都是被调用函数需要传入的实参

需要直接调用函数且修改this的指向,使用call和apply

需要修改this的指向,但是不直接调用函数,让js来调用时,使用bind,一般是在回调函数中使用,比如延时器、定时器、事件函数

四、继承

构造函数继承

能够继承方法,但是属性却不能继承

混合继承

用函数,让js来调用时,使用bind,一般是在回调函数中使用,比如延时器、定时器、事件函数

四、继承

构造函数继承

能够继承方法,但是属性却不能继承

混合继承

使用构造函数 + 原型继承

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值