闭包和继承--逆战班

闭包和继承

变量作用域(全局作用域、局部作用域)

Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量,在函数外部自然无法读取 函数内的局部变量。

什么是闭包(闭包的原理)

闭包就是能够读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函 数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。所以,在本质 上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

闭包的特点

闭包特性1: 函数内部的函数所引用的变量 会被保存下来

闭包特性2: 由于内部函数所引用的外部变量会被保存下来 所以变量会一直在内存中保存直到 浏览器被关闭,垃圾回收机制失效

闭包的应用场景

局部变量的累加

自执行的匿名函数保存循环变量

使用闭包的注意点

1、由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包, 否则会造成网页的性能问题,在IE中可能导致内存泄露。

2、闭包会在父函数外部,改变父函数内部变量的值。

构造函数继承

将父对象的构造函数绑定在子对象上。

call/apply继承

在子对象构造函数中利用call或apply将父对象指向子对象的实例对象。

Prototype(原型)–原型的概念

Javascript规定,每一个函数都有一个prototype对象属性,指向另一个对象(原型链)。

prototype对象属性的所有属性和方法,都会被构造函数的实例继承。这意味着,我们可以把 那些不变(公用)的属性和方法,直接定义在prototype对象属性上。

prototype就是调用构造函数创建的那个实例对象的原型(proto)。

prototype可以让所有对象实例共享它所包含的属性和方法。也就是说,不必在构造函数中定义对象信息,而是可以直接将这些信息添加到原型中。

构造函数与实例

构造函数(类)—不具备方法和属性,只能用来构造实例对象,构造函数里面添加的 是属性(因为一般情况下属性各不相同)原型里面添加的是方法(因为方法都一样)

实例(实例对象),具有一定的功能,被构造函数(类)构造出来的。

Prototype模式的其他验证方法

hasOwnProperty() : 看是不是对象自身下面的属性, 只在属性存在于实例中时才返回 true。

p1.hasOwnProperty(‘name’)

in操作符用来判断某个属性属于某个实例对象,可以是对象的直接属性,也可以是通过prototype继承的属性(包括Object下面的属性)。alert(‘name’ in p1);

toString() :系统对象下面都是自带的 , 系统对象都有toString(),自己写的对象都是通过原型链找Object下面的,可以把对象转成字符串, 可以做进制转换或者类型的判断。

constructor:实例对象的构造函数 (实例对象.constructor)

instanceof:判断一个对象是否是一个构造函数(类)的实例。p1instanceof Person

isPrototypeOf (): 判断一个实例对象是否指向了该构造函数的原型对象。

Person.prototype.isPrototypeOf(p2)

原型链继承(JS原型与原型链)

实例对象与原型之间的连接,叫做原型链。proto( 隐式连接 )

JS在创建对象的时候,都有一个叫做proto的内置属性,用于指向创建它的函数对象的原型对象prototype。

内部原型(proto)和构造器的原型(prototype)

1、每个对象都有一个__proto__属性,原型链上的对象正是依靠这个属性连结在一起

2、作为一个对象,当你访问其中的一个属性或方法的时候,如果这个对象中没有这个方法或属性,那么Javascript引擎将会访问这个对象的__proto__属性所指向上一个对象,并在那个对象中查找指定的方法或属性,如果不能找到,那就会继续通过那个对象的__proto__属性指向的对象进行向上查找,直到这个链表结束。

原型链的最外层:object.prototype–>null

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值