闭包以及面向对象

Posted zhangli123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了闭包以及面向对象相关的知识,希望对你有一定的参考价值。

1.什么是闭包?

以我个人的理解,简单来说就是函数套函数

官方的是:闭包是函数和声明该函数的词法环境的组合

2.闭包的作用

     (1) 可以读取函数内部的变量
      (2) 可以把变量始终保存在内存中

3.闭包的写法
     (1) 一个函数(即外部函数)里面包含另一个函数(即内部函数),并且return返回这个内部函数,
      然后内部函数在定义内部函数之外的作用域被调用,这时的内部函数就是一个闭包了。
      (2) 内部函数引用了外部函数的变量,这个变量不会被销毁,因为闭包需要这个变量,
      所以通过闭包可以访问闭包保存的变量
4.闭包的缺点

    (1) 因为闭包的变量保存在内存中,内存泄漏,对内存的消耗很大,所以不要滥用闭包

5.闭包常用的地方:
    (1) es5 for循环事件监听
    (2)函数里使用了定时器
    (3)封装许多高级的功能集
6.闭包的是怎样实现的

(1)这就相当于我们构造了一个闭包的环境

技术图片

(2)第一次调用内层循环

技术图片

(3)第二次调用内层循环

技术图片

(4)循环结束

技术图片

6.什么是面向对象

面向对象是一种思维模式

比较准确的说:面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象

封装:把相关信息存储在对象在的能力

聚集:就是把一个对象存储在另一个对象的能力

继承:由一个类(或多个类)得来的属性和方法的能力

多态:编写能以多种方法运行的函数或方法的能力

7.构造函数

构造函数:构造函数本身就是函数,只不过是创建的一个对象函数,其中我们要注意,必须使用new操作符

语法:var  a = fun();

调用函数会经历以下步骤:

1.创建一个新的对象 

 2.将构造函数的作用域给新对象,其中this是全局变量,window.age获取的结果一样   

3.新对象添加属性   

4.返回新对象

8.原型模式:每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,这个对象包含可以由特定类型的实例共享的属性和方法

技术图片

这是我们要注意的子元素当中有属性的话就不会继承父级元素的

9.原型的关键是:

1、所有的引用类型(数组、函数、对象)可以自由扩展属性(除null以外)。

2、所有的引用类型都有一个’_ _ proto_ _‘属性(也叫隐式原型,它是一个普通的对象)。

3、所有的函数都有一个’prototype’属性(这也叫显式原型,它也是一个普通的对象)。

4、所有引用类型,它的’_ _ proto_ _‘属性指向它的构造函数的’prototype’属性。

5、当试图得到一个对象的属性时,如果这个对象本身不存在这个属性,那么就会去它的’_ _ proto_ _‘属性(也就是它的构造函数的’prototype’属性)中去寻找。

10.原型链

原型链继承的主要思想是利用原型让一个引用类型继承另一引用类型的属性和方法

以上是关于闭包以及面向对象的主要内容,如果未能解决你的问题,请参考以下文章

闭包和面向对象设计

JavaScript碎片———函数闭包(模拟面向对象)

JavaScript对象原型链继承闭包

JavaScript对象原型链继承和闭包

面向对象

Python之面向对象:闭包和装饰器