javascript闭包2

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

javascript闭包胡龙目录1.js闭包简介2.闭包与javascript模块编程3.面向对象4.Js闭包优缺点Js闭包简介闭包:是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量。scriptfunctionfunction1(){varproperty;this.function2=function(){}}scriptJs闭包简介Javascript变量作用范围scriptvarproperty1;functionfunction1(){varproperty2;this.function2=function(){varproperty3;}}scriptwindow对象property1function1()function1对象property2function2()function2对象property3闭包与js模块化编程①安全性:JavaScript被模块化只留下供外界调用的接口。②效率高:各模块耦合性低,结构清晰,可读性强,提高开发效率。③易维护:需求变动时,只需修改局部模块,降低维护难度及维护成本。④易扩展:高内聚、低耦合的系统结构,使系统更灵活、更容易扩展。面向对象面向对象-封装functionclassA()//定义classA类{varname=小明;varage=20;this.mathed=function(){console.log(name+今年+age);}}vargetstring=newclassA();//使用mathed方法getstring.mathed();//使用name属性if(getstring.name){console.log(name);}else{console.log(nameisundifine);}//使用age属性if(getstring.age){console.log(age)}else{console.log(ageisundifine);}面向对象-继承1.对象冒充2.call()方法方式3.原型链方式4.apply()方法方式//父类函数functionParent(Pname){this.Pmathed=function(){console.log(Pname);}}继承:对象冒充functionParent(Pname){this.Pmethod=function(){console.log(Pname);}}functionChild(name,age){this.method=Parent;this.method(name);deletethis.mnethod;this.Cmethod=function(){console.log(name+年龄+age);}}//实例化varpmethod=newParent(父亲);pmathed.Pmethod();varmymethod=newChild(孩子,20);mymathed.Pmethod();mymathed.Cmethod();//第一步:this.method是作为一个临时的属性,并且指向Parent所指向的对象,//第二步:执行this.method方法,即执行Parent所指向的对象函数//第三步:销毁this.method属性,即此时Child就已经拥有了Parent的所有属性和方法继承:call()方法functionParent(Pname){this.Pmethod=function(){console.log(Pname);}}functionChild(name,age){Parent.call(this,name);this.Cmethod=function(){console.log(name+年龄+age);}}//实例化varparent=newParent(父亲);varchild=newChild(孩子,20);parent.Pmathed();child.Pmathed();child.Cmathed();call方法的第一个参数的值赋值给类(即方法)中出现的thiscall方法的第二个参数开始依次赋值给类(即方法)所接受的参数继承:原型链方法functionParent(){this.Pmethod=function(Pname){console.log(Pname);}}functionChild(age){this.Cmethod=function(){console.log(name+年龄+age);}}Child.prototype=newParent();//实例化varparent=newParent();varchild=newChild(20);parent.Pmethod(父亲);child.Pmethod(孩子);child.Cmethod();//子类通过prototype将所有在父类中通过prototype追加的属性和方法都追加到Child,从而实现了继承面向对象-多态向对象语言的多态一般都由方法重载和虚方法来实现多态。由于Javascript是弱类型的语言,解释器无法通过参数类型和参数个数来区分不同的重载方法。Javascript只能模拟多态。1.参数类型判断2.参数个数判断多态:参数类型varMyClass=function(){varAddNum=function(a,b){returna+b;}varAddString=function(a,b){returna+年龄是+b;}this.Add=function(a,b){//根据参数类型判断if(typeof(a)==number)returnAddNum(a,b);elsereturnAddString(a,b);}}//实例化varMyObj=newMyClass();console.log(MyObj.Add(5,6));console.log(MyObj.Add(小明,20));多态:参数个数functionadd(){varsum=0;//判断参数个数varnum=arguments.length;for(vari=0;inum;i++){sum+=arguments[i];}returnsum;}//实例化console.log(add(1));console.log(add(1,2));console.log(add(1,2,3));JS闭包占用内存问题闭包的缺点就是常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。解决方法:手动释放内存functionclassA(){this.method=function(){console.log(thisisthemethodofclassA.);}}//占用内存varca=newclassA();varcb=newclassA();varcc=newclassA();//释放内存ca=null;cb=null;cc=null;

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功