JS面向对象——OOP
闭包
定义&原理
闭包即一个拥有许多变量和绑定了这些变量的环境的表达式(通常为函数)
闭包利用了变量的作用域链,函数内部可以访问外部的变量和全局变量,而函数外部无法访问函数内部变量
因此,在函数内部定义一个函数,用函数内的函数来访问函数内部的变量,并将该变量存储在内存中
如下的例子中,因为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相关推荐
- JS面向对象编程(OOP)
什么是JS面向对象编程(OOP)? 用对象的思想去写代码,就是面向对象编程. 上面这张图就是一个对象,紫色部分就是车的属性,黄色部分就是修改车的方法: 把他们集合到一个构造函数内,就是这样的 func ...
- 对js面向对象的理解
转自:http://www.cnblogs.com/jingwhale/p/4678656.html js面向对象理解 ECMAScript 有两种开发模式:1.函数式(过程化),2.面向对象(OOP ...
- js面向对象模拟京东商城图片放大效果
js面向对象模拟京东商城图片放大效果 JavaScript 的核心是支持面向对象的,同时它也提供了强大灵活的 OOP 语言能力.本文简单介绍一下使用JavaScript面向对象思想模拟京东商城鼠标悬浮 ...
- Js 面向对象开发-基础
一.面向对象开发 面向对象编程 -- Object Oriented Programming,简称 OOP ,是一种编程开发思想. 它将真实世界各种复杂的关系,抽象为一个个对象,然后由对象之间的分工与 ...
- JavaScript – 6.JS面向对象基础(*) + 7.Array对象 + 8.JS中的Dictionary + 9.数组、for及其他...
6.JS面向对象基础(*) 7.Array对象 7.1 练习:求一个数组中的最大值.定义成函数. 7.2 练习:将一个字符串数组输出为|分割的形式,比如"刘在石|金钟国|李光洙|HAHA|宋 ...
- JS面向对象一:MVC的面向对象封装
JS面向对象一:MVC的面向对象封装 MDNjavascript面向对象 面向对象(Object-Oriented) 面向对象里面向的意思是以...为主,面向对象编程既以对象为主的编程. 面向对象的一 ...
- java实现选项卡定时轮播_原生js面向对象编程-选项卡(自动轮播)
原生js面向对象编程-选项卡(自动轮播) }#div1 input{color:#fff;width:100px;height:40px;background:darkseagreen;border: ...
- js面向对象程序设置——创建对象
<script type="text/javascript"> //工厂方式 //1.原始方式 /* var ...
- 【转载】PHP面向对象(OOP)编程入门教程
面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持. 如何使用OOP的思想来进行PHP的高级编程,对于提高 PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们 ...
最新文章
- 前端进阶 -css的弱化与js的强化(11)
- matlab第二次上机作业答案,第二次上机作业
- centos8启动docker-mysql8容器
- Exchange2003-2010迁移系列之二,迁移前的准备工作(上)
- 计算机相关专业的自我评价,计算机相关专业的学生自我评价
- 重磅开源!《30天吃掉那只 TensorFlow2.0 》(附下载)
- linux定时任务_linux定时任务cron HelloWorld
- HTTP和HTTPS的区别以及计算机网络常见面试题总结
- Mysql关键字 (MySQL 5.1参考手册)
- 浪潮服务器销售案例ppt,浪潮服务器产品线介绍(ppt 105页)
- UniApp开发社交社区
- 花猫c语言,C语言实现小猫钓鱼游戏 - 技术经验 - W3xue
- Instruments之相关介绍(一)
- node api框架_使用Web API,Node和Nexmo从浏览器发送SMS
- NAND Flash硬件原理
- 如何正确使用螳螂教育CRM系统?
- 什么是集线器、交换机、路由器、光猫?它们之间的本质区别是什么?
- 2003计算机应用基础题答案,计算机应用基础(Windows_XP+Office_2003)课后题答案
- 特斯拉Y系列降价后订单暴增,国信证券称后期有望降至26万
- Pangu and Stones (hihocoder 1636)
热门文章
- .jar是什么文件?(转载)
- Win10任务栏软件图标变成白色如何解决?
- 今日头条能干掉微信么? | 畅言
- 985本科生歧视北大博导“第一学历”,“无法相信北大会有这么差的师资”
- 电脑端上有哪些免费好用的思维导图软件?
- 涂鸦标准模组MCU SDK开发流程
- 什么是FD.IO/VPP?
- R语言和医学统计学:非参数检验的补充
- 温度转换java小程序_利用easygui模块编写的华氏温度与摄氏温度转换的小程序
- win10计算机无法使用网络资源管理器,win10无法显示可用网络怎么办