当前位置: 首页 > 科技观察

必知javascript:面向对象编程

时间:2023-03-22 01:44:25 科技观察

面向对象编程技术的核心概念:封装、继承、多态;在一些主流的高级编程语言中,如:C#、VB.NET、JAVA、PHP等,实现起来非常容易,但是如果要在javascript中实现面向对象编程,就没有那么直接和easy,因为javascript不是面向对象的语言,所以我们只能利用javascript的一些特性,比如:封闭包,原型链等来模拟面向对象编程。我想这些都是熟练和灵活使用javascript的基础。园内已经有很多javascript高手对这方面进行了介绍和分析,我只是作为一个项目使用。站在负责人的角度(独立设计开发WEB前后端)重新认识javascript面向对象的要点。既然是面向对象,首先要知道如何创建对象。下面介绍几种常见的创建对象的方法:A.直接创建对象实例:12345678910111213141516//直接实例化一个对象varPerson1={Name:"Dreamontheroad",年龄:29,性别:"男",身高:178};警报(Person1.Name);varPerson2=newObject();Person2.Name="梦想在路上";Person2.Age=29;Person2.Sex="男";Person2.Height=178;警报(Person2.Name);//这是上面的简写varPerson3=newObject({Name:"梦想在路上",Age:29,Sex:"Male",Height:178});警报(Person3.Name);优点:直接创建一个对象,不需要提前定义类型;缺点:无法实现复用;B.先定义再实例化对象:12345678910//先定义类,再实例化成一个对象functionPerson4(n,a,s,h){this.Name=n;这个。年龄=一个;这个.Sex=s;这个.Height=h;}varp4=newPerson4("梦想在路上",29,"男",178);警报(p4。年龄);优点:类似于面向对象编程语言的构造函数,简单易懂,定义后可以通过new关键字实例化多个对象,实现复用。缺点:需要在实例化前定义;综上所述,推荐使用方法B来创建对象。实现封装,即只暴露公共方法和公共属性,隐藏实现细节(私有方法、属性)123456789101112131415161718192021222324252627282930functionPerson5(n,a,s,h){//公共属性this.Name=n;这个。年龄=一个;这个.Sex=s;这个.Height=h;//公共方法this.AfterYear=function(count){updateAge(count);alert(_currentYear+"之后,我有:"+this.Age+"岁!");};this.Say=function(){alert("我的个人信息-->Name:"+this.Name+",Age:"+this.Age+",Sex:"+this.Sex+",Height:"+this.Height);}//私有属性和方法var_self=this;var_currentYear=2015;functionupdateAge(count){_currentYear+=count;_self.Age+=count;};}varp5=newPerson5("梦想在路上",29,"男",178);p5.AfterYear(10);p5.AfterYear(25);使用原型链实现继承,即一个对象包含另一个对象的所有公共属性和方法。实现继承的方式有很多种。我认为下面的形式比较适合模拟继承面向对象的思想:123456789101112131415functionSoftEngineer(n,a,s,h,lang){Person5.call(this,n,a,s,h);//将Person5的所有属性和方法都包含到SoftEngineer中,从而实现继承this.Lang=lang;this.SayCode=function(){alert("我是一名软件工程师Engineer,我知道"+this.Lang+"编程语言!");}this.Working=function(){};//空方法,类似于面向对象中的虚方法}SoftEngineer.prototype=newPerson5();//将SoftEngineer的原型赋值给Person5的实例varsoftengr=newSoftEngr("梦在旅途",29,"Male",178,"javascript");softgr.Say();softgr.SayCode();使用原型链实现多态性,即同一个方法签名在不同的子类中表现不同:123456789101112131415161718192021222324函数WebSoftEngineer(n,a,s,h,lang){SoftEngineer.apply(this,[n,a,s,h,lang]);this.Working=function(){alert("我是一名网页工程师,从事网页开发设计!");};};WebSoftEngineer.prototype=newSoftEngineer();函数AppSoftEngineer(n,a,s,h,lang){SoftEngineer.apply(this,[n,a,s,h,lang]);this.Working=function(){alert("我是应用工程师,从事客户端应用开发设计!");};};AppSoftEngineer.prototype=newSoftEngineer();varwebengr=newWebSoftEngineer("梦想在路上",29,"男",178,"javascript");webengr.Say();webengr.Working();varappengr=newAppSoftEngineer("梦想在路上",29,"男",178,"c#");appengr.Say();appengr.Working();