闭包

定义&原理

  闭包即一个拥有许多变量和绑定了这些变量的环境的表达式(通常为函数)

  闭包利用了变量的作用域链,函数内部可以访问外部的变量和全局变量,而函数外部无法访问函数内部变量

  因此,在函数内部定义一个函数,用函数内的函数来访问函数内部的变量,并将该变量存储在内存中

  如下的例子中,因为n相对于f2是全局变量,f2依存于f1,因此运行a(实际为f1)之后,n继续保存在内存中不清除

  执行nAdd函数后,n变成1000

 1 function f1(){
 2     var n = 999;
 3     nAdd = function(){
 4         n = n+1;
 5     }
 6     function f2(){
 7         alert(n);
 8     }
 9     return f2;
10 }
11 var a = f1();
12 a();//弹出999
13 nAdd();
14 a();//弹出1000

用途

  利用闭包,在函数外读取函数内部的局部变量,并让函数内部的局部变量保存在内存中

优缺点

  优点:封装性强,可访问局部变量

  缺点:局部变量长时间占用内存,容易产生内存泄漏

封装

定义&原理

  把对象内部数据和操作细节隐藏,只对外提供一个对象的专门访问的接口

  JS中,利用闭包来实现封装的效果

  用函数内的嵌套函数实现访问函数局部变量的方法,叫做特权方法

 1 function f1(){
 2     var n = 1;
 3     //此处f2函数可以让用户在函数外访问n,为特权方法
 4     this.f2 = function(){
 5         console.log(++n);
 6     }
 7     //等同于下面的方法
 8     function f2(){
 9         console.log(++n);
10     }
11     return f2;
12 }
13 var a = f1();
14 a();

缺点

  封装占用了内存,不利于继承

继承

原型

  即用prototype给对象添加属性和方法

原型链

  JS创建对象时,新对象内部有一个__proto__内置属性,指向创建其函数对象的原型对象prototype

  当使用对象的方法时,现在当前对象中查找,如果有则使用,没有就查找当前对象的__proto__属性中是否有方法,有则调用,无则继续向上查找,如此形成一条原型链

  

原型继承

  通过原型方法创建新对象时,如果子对象没有修改/重新定义同名方法,原型中有的方法会继承到子对象中

  子对象使用方法时也会沿着原型链逐步向上查找,只有在最顶层父元素都没有该方法时才报错

  

构造继承

  在子类内部构造父类的对象实现继承

  

转载于:https://www.cnblogs.com/shige720/p/11274840.html

JS面向对象——OOP相关推荐

  1. JS面向对象编程(OOP)

    什么是JS面向对象编程(OOP)? 用对象的思想去写代码,就是面向对象编程. 上面这张图就是一个对象,紫色部分就是车的属性,黄色部分就是修改车的方法: 把他们集合到一个构造函数内,就是这样的 func ...

  2. 对js面向对象的理解

    转自:http://www.cnblogs.com/jingwhale/p/4678656.html js面向对象理解 ECMAScript 有两种开发模式:1.函数式(过程化),2.面向对象(OOP ...

  3. js面向对象模拟京东商城图片放大效果

    js面向对象模拟京东商城图片放大效果 JavaScript 的核心是支持面向对象的,同时它也提供了强大灵活的 OOP 语言能力.本文简单介绍一下使用JavaScript面向对象思想模拟京东商城鼠标悬浮 ...

  4. Js 面向对象开发-基础

    一.面向对象开发 面向对象编程 -- Object Oriented Programming,简称 OOP ,是一种编程开发思想. 它将真实世界各种复杂的关系,抽象为一个个对象,然后由对象之间的分工与 ...

  5. JavaScript – 6.JS面向对象基础(*) + 7.Array对象 + 8.JS中的Dictionary + 9.数组、for及其他...

    6.JS面向对象基础(*) 7.Array对象 7.1 练习:求一个数组中的最大值.定义成函数. 7.2 练习:将一个字符串数组输出为|分割的形式,比如"刘在石|金钟国|李光洙|HAHA|宋 ...

  6. JS面向对象一:MVC的面向对象封装

    JS面向对象一:MVC的面向对象封装 MDNjavascript面向对象 面向对象(Object-Oriented) 面向对象里面向的意思是以...为主,面向对象编程既以对象为主的编程. 面向对象的一 ...

  7. java实现选项卡定时轮播_原生js面向对象编程-选项卡(自动轮播)

    原生js面向对象编程-选项卡(自动轮播) }#div1 input{color:#fff;width:100px;height:40px;background:darkseagreen;border: ...

  8. js面向对象程序设置——创建对象

    <script type="text/javascript">              //工厂方式         //1.原始方式         /* var ...

  9. 【转载】PHP面向对象(OOP)编程入门教程

    面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持. 如何使用OOP的思想来进行PHP的高级编程,对于提高 PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们 ...

最新文章

  1. 前端进阶 -css的弱化与js的强化(11)
  2. matlab第二次上机作业答案,第二次上机作业
  3. centos8启动docker-mysql8容器
  4. Exchange2003-2010迁移系列之二,迁移前的准备工作(上)
  5. 计算机相关专业的自我评价,计算机相关专业的学生自我评价
  6. 重磅开源!《30天吃掉那只 TensorFlow2.0 》(附下载)
  7. linux定时任务_linux定时任务cron HelloWorld
  8. HTTP和HTTPS的区别以及计算机网络常见面试题总结
  9. Mysql关键字 (MySQL 5.1参考手册)
  10. 浪潮服务器销售案例ppt,浪潮服务器产品线介绍(ppt 105页)
  11. UniApp开发社交社区
  12. 花猫c语言,C语言实现小猫钓鱼游戏 - 技术经验 - W3xue
  13. Instruments之相关介绍(一)
  14. node api框架_使用Web API,Node和Nexmo从浏览器发送SMS
  15. NAND Flash硬件原理
  16. 如何正确使用螳螂教育CRM系统?
  17. 什么是集线器、交换机、路由器、光猫?它们之间的本质区别是什么?
  18. 2003计算机应用基础题答案,计算机应用基础(Windows_XP+Office_2003)课后题答案
  19. 特斯拉Y系列降价后订单暴增,国信证券称后期有望降至26万
  20. Pangu and Stones (hihocoder 1636)

热门文章

  1. .jar是什么文件?(转载)
  2. Win10任务栏软件图标变成白色如何解决?
  3. 今日头条能干掉微信么? | 畅言
  4. 985本科生歧视北大博导“第一学历”,“无法相信北大会有这么差的师资”
  5. 电脑端上有哪些免费好用的思维导图软件?
  6. 涂鸦标准模组MCU SDK开发流程
  7. 什么是FD.IO/VPP?
  8. R语言和医学统计学:非参数检验的补充
  9. 温度转换java小程序_利用easygui模块编写的华氏温度与摄氏温度转换的小程序
  10. win10计算机无法使用网络资源管理器,win10无法显示可用网络怎么办