JS学习 继承 多态 构造函数等

本文深入讲解JavaScript面向对象的实现方式,包括对象定义、属性操作、继承机制及多态特性等核心概念。通过具体示例演示封装、继承和多态的应用,并对比不同方法的特点。

u     js面向对象的再说明

 

 

(1)   对于比较简单的对象,我们也可以这样定义

 

 

var dog={name: "小明"};

 

 

       window.alert(dog['name']);

 

       var dog1={name:'小红',sayHello:function(a,b){window.alert(a+b);}};

 

 

       dog1.sayHello(45,55);

 

 

(2)   在某些情况下,我们需要去改变某个函数的this指向,我们可以通过  call/apply 来实现

 

 

基本用法:

 

函数名.call(对象);// 这时 函数的this就是 对象

 

(3)   for ... in的另外用法

 

可以对数组遍历

 

 

可以对象遍历

 

       //json

       vardog={name:"xm",age:34,color:"red"};

 

       //遍历对象

       /*for(var key in dog){

              window.alert(dog[key]);

       }*/

 

       //你的浏览器window对象支持的属性有那些

      

       for(var key in window){

              document.write("<br/>"+key+"="+window[key]);

       }

 

(4)   可以通过delete 对象名.属性  来手动的删除某个属性值.

 

 

 

 

u     js的面向对象的三大特征

 

1.      封装性

 

所谓封装,就是把我们抽象出的属性和对属性的操作写到类的定义中,称为封装.

 

js 中实现封装主要有两种封装( 公开,私有)

 

class Person(name,sal){

       this.name=name;//公开

       varsal=sal;//私有

 

       this.showInfo=function(){//公开

       window.alert(this.name+””+sal);

}

 

showInfo2(){ //把函数私有化.

       window.alert(“你好”+this.name+” ”+sal)

}

}

 

 

 

 

u     通过构造函数添加成员方法和通过原型法添加成员方法的区别

1.      通过原型法分配的函数是所有对象共享的.

2.      通过原型法分配的属性是独立.(如果你不修改属性,他们是共享)

3.      建议,如果我们希望所有的对象使用同一一个函数,最好使用原型法添加函数,这样比较节省内存.

 

Dog.prototype.shout=function (){

                     window.alert("小狗尖叫"+this.name);

              }

 

              //通过原型也可以给每个对象,分配属性

              Dog.prototype.color="red";

 

              var dog1=newDog("aa");

              var dog2=new Dog("bb");

             

              if(dog1.shout==dog2.shout){

                     window.alert("dog1.shout==dog2.shout");

              }

              dog1.color="黑色";

              window.alert(dog1.color+""+dog2.color);

 

4.      请大家看一个题:

 

function Person(){

                    

              }

 

              // 创建对象

              var p1=new Person();

              //     p1.say();[错误]

              // 这时用原型法分配

              Person.prototype.say=function(){

                     window.alert("ok");

              }

 

              p1.say();

 

结论是 类.prototype.函数=function(){};

称为后置绑定.

 

 

 

 

u     js面相对象的继承

 

看一段代码->问题是什么?

 

 

①对象冒充

 

代码如下:

<html>

<head>

<metahttp-equiv="content-type"content="text/html;charset=utf-8"/>

 

<scripttype="text/javascript">

 

      

       //中学生

/*    function MidStu(name,age){

              this.name=name;

              this.age=age;

 

              this.show=function(){

                     window.alert(this.name+"年龄是="+this.age);

              }

 

              this.pay=function(fee){

                     window.alert("你的学费是"+fee*0.8);

              }

       }

 

       //小学生

       function Pupil(name,age){

              this.name=name;

              this.age=age;

 

              this.show=function(){

                     window.alert(this.name+"年龄是="+this.age);

              }

 

              this.pay=function(fee){

                     window.alert("你的学费是"+fee*0.5);

              }

       }*/

 

       //代码的复用性不高.

       //修改如下:

       //1. 把子类中共有的属性和方法抽取出,定义一个父类Stu

       function Stu(name,age){

             

              this.name=name;

              this.age=age;

             

              this.show=function(){

                     window.alert(this.name+"年龄是="+this.age);

              }

       }

 

       //2.通过对象冒充来继承父类的属性的方法

 

       function MidStu(name,age){

             

              this.stu=Stu; //这里相当于把Stu构造函数(类)赋值给我们的属性this.stu

              //调用this.stu方法

              this.stu(name,age); //这个表示初始化MidStu,相当于执行Stu(name,age),这句话必须有,否则无法实现集成的效果

 

              //可以写MidStu自己的方法.

              this.pay=function(fee){

                     window.alert("你的学费是"+fee*0.8);

              }

       }

 

       function Pupil(name,age){

              this.stu=Stu;//这里只是把码继承.

              //初始化一把

              this.stu(name,age);    

              //可以写Pupil自己的方法.

              this.pay=function(fee){

                     window.alert("你的学费是"+fee*0.5);

              }

             

       }

 

       //测试

 

       var midstu=new MidStu("贾宝玉",15);

       var pupil=new Pupil("贾环",12);

 

 

       midstu.show();

 

       midstu.pay(100);

 

 

       pupil.show();

       pupil.pay(100);

 

</script>

</html>

 

 

②通过call 或者apply来实现

 

<html>

<head>

<metahttp-equiv="content-type"content="text/html;charset=utf-8"/>

 

<scripttype="text/javascript">

 

      

       //中学生

/*    function MidStu(name,age){

              this.name=name;

              this.age=age;

 

              this.show=function(){

                     window.alert(this.name+"年龄是="+this.age);

              }

 

              this.pay=function(fee){

                     window.alert("你的学费是"+fee*0.8);

              }

       }

 

       //小学生

       function Pupil(name,age){

              this.name=name;

              this.age=age;

 

              this.show=function(){

                     window.alert(this.name+"年龄是="+this.age);

              }

 

              this.pay=function(fee){

                     window.alert("你的学费是"+fee*0.5);

              }

       }*/

 

       //代码的复用性不高.

       //修改如下:

       //1. 把子类中共有的属性和方法抽取出,定义一个父类Stu

       function Stu(name,age){

             

              window.alert("确实被调用.");

              this.name=name;

              this.age=age;

             

              this.show=function(){

                     window.alert(this.name+"年龄是="+this.age);

              }

       }

 

       //2.通过对象冒充来继承父类的属性的方法

 

       function MidStu(name,age){

             

              //这里这样理解: 通过call修改了Stu构造函数的this指向,

              //让它指向了调用者本身.

              Stu.call(this,name,age);

              //如果用apply实现,则可以

//Stu.apply(this,[name,age]); //说明传入的参数是数组方式

              //可以写MidStu自己的方法.

              this.pay=function(fee){

                     window.alert("你的学费是"+fee*0.8);

              }

       }

 

       function Pupil(name,age){

             

              Stu.call(this,name,age);//当我们创建Pupil对象实例,Stu的构造函数会被执行,当执行后,我们Pupil对象就获取从 Stu封装的属性和方法

              //可以写Pupil自己的方法.

              this.pay=function(fee){

                     window.alert("你的学费是"+fee*0.5);

              }

             

       }

 

       //测试

 

       var midstu=new MidStu("孙悟空",15);

       var pupil=new Pupil("猪八戒",12);

 

 

       midstu.show();

 

       midstu.pay(100);

 

 

       pupil.show();

       pupil.pay(100);

 

</script>

</html>

 

 

u     js的继承小结

(1)   js对象可以通过对象冒充,实现多重继承

(2)   Object 类是所有js类的基类

 

 

 

u     js的多态的特性

 

 

①    js的函数的重载文件

 

js默认不支持重载,我们可以通过,判断参数的个数来实现重载

<html>

<head>

<metahttp-equiv="content-type"content="text/html;charset=utf-8"/>

 

<scripttype="text/javascript">

 

      

       //*****************说明js不支持重载*****

       /*function Person(){

             

              this.test1=function (a,b){

                     window.alert('function(a,b)');

              }

              this.test1=function (a){

                     window.alert('function(a)');

              }

       }

 

       var p1=new Person();

       //js中不支持重载.

       p1.test1("a","b");

       p1.test1("a");*/

 

      

      

      

       //js怎么实现重载.通过判断参数的个数来实现重载

 

 

       function Person(){

             

              this.test1=function (){

                    

                     if(arguments.length==1){

                            this.show1(arguments[0]);

                     }elseif(arguments.length==2){

                            this.show2(arguments[0],arguments[1]);

                     }elseif(arguments.length==3){

                            this.show3(arguments[0],arguments[1],arguments[2]);

                     }

 

              }

             

 

              this.show1=function(a){

                     window.alert("show1()被调用"+a);

              }

 

              this.show2=function(a,b){

                     window.alert("show2()被调用"+"--"+a+"--"+b);

              }

 

              function show3(a,b,c){

                     window.alert("show3()被调用");

              }

       }

 

       var p1=new Person();

       //js中不支持重载.

       p1.test1("a","b");

       p1.test1("a");

 

</script>

</html>

 

②    覆盖

 

 

当子类有一个方法和父类一样,则我们称子类的方法覆盖了父类的方法 。

 

function Stu(){

             

              this.show=function(){

                     window.alert("stushow");

              }

       }

 

       function MidStu(){

             

              this.stu=Stu;

              this.stu();

 

              this.show=function(){

                     window.alert("midstushow");

              }

       }

 

       var midstu=new MidStu();

 

       midstu.show();

 

☞ 要实现覆盖,需要把子类的方法,防止类定义的后面.

 

 

 

智慧医药系统(smart-medicine)是一款采用SpringBoot架构构建的Java Web应用程序。其界面设计简洁而富有现代感,核心特色在于融合了当前前沿的生成式人工智能技术——具体接入了阿里云的通义千问大型语言模型,以此实现智能医疗咨询功能,从而增强系统的技术先进性与实用价值。该系统主要定位为医学知识查询与辅助学习平台,整体功能结构清晰、易于掌握,既适合编程初学者进行技术学习,也可作为院校课程设计或毕业项目的参考实现。 中医舌诊作为传统医学的重要诊断手段,依据舌象的颜色、形状及苔质等特征来辨析生理状况与病理变化。近年来,随着计算科学的进步,人工智能技术逐步渗透到这一传统领域,形成了跨学科的研究与应用方向。所述的中医舌诊系统正是这一方向的实践产物,它运用AI算法对舌象进行自动化分析。系统以SpringBoot为基础框架,该框架依托Java语言,致力于简化Spring应用程序的初始化与开发流程,其突出优势在于能高效构建独立、可投入生产的应用,尤其契合微服务架构与云原生环境,大幅降低了开发者在配置方面的负担。 系统中整合的通义千问大语言模型属于生成式人工智能范畴,通过海量数据训练获得模拟人类语言的能力,可在限定领域内生成连贯文本,为用户提供近似专业医生的交互式咨询。该技术的引入有助于提升诊断过程的自动化水平与结果一致性。 在设计与体验层面,本系统强调逻辑明晰与操作简便,旨在降低用户的学习门槛,尤其适合中医知识的入门教学。整体交互模式接近百科全书式查询,功能模块精炼聚焦,因而非常适用于教育场景,例如学术项目展示或毕业设计答辩。通过直观的实践界面,使用者能够更深入地理解中医舌诊的理论与方法。 此外,系统界面遵循简约大气的设计原则,兼顾视觉美感与交互流畅性,以提升用户的专注度与使用意愿。结合AI的数据处理能力,系统可实现对舌象特征的快速提取与实时分析,这不仅为传统诊断方法增添了客观量化维度,也拓展了中医知识传播的途径。借助网络平台,该系统能够突破地域限制,使更多用户便捷地获取专业化的中医健康参考,从而推动传统医学在现代社会的应用与普及。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
【掺铒光纤放大器(EDFA)模型】掺铒光纤放大器(EDFA)分析模型的模拟研究(Matlab代码实现)内容概要:本文介绍了掺铒光纤放大器(EDFA)分析模型的模拟研究,并提供了基于Matlab的代码实现方案。通过对EDFA的工作原理、增益特性、噪声系数等关键性能指标进行数学建模与仿真分析,帮助研究人员深入理解其在光通信系统中的作用机制。文档还列举了多个相关科研方向的技术支持内容,涵盖智能优化算法、路径规划、无人机应用、通信与信号处理、电力系统管理等多个领域,展示了Matlab在科学研究与工程仿真中的广泛应用能力。此外,文中附带网盘链接,便于获取完整的代码资源与开发工具包。; 适合人群:具备一定光学通信或电子信息背景,熟悉Matlab编程,从事科研或工程仿真的研究生、高校教师及技术研发人员。; 使用场景及目标:①用于光通信系统中EDFA性能的理论分析与仿真验证;②支持科研人员快速构建和测试EDFA模型,提升研究效率;③为教学实验、毕业设计及学术论文复现提供可靠的技术参考与代码基础。; 阅读建议:建议读者结合光通信基础知识,按照文档结构逐步运行并调试Matlab代码,重点关注模型参数设置与仿真结果分析,同时可利用提供的网盘资源拓展学习其他相关课题,深化对系统级仿真的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值