javascript每天必须学习的包
朋友们好,我们已经解释了javascript的基础。从今天的内容开始,我们将开始谈论封装。在这里,我们一点一点地接触面向对象编程。如果使用一种语言的程序员连OOP是什么都不知道,或者只听说过,不会理解和编写面向对象的代码,那么就没有必要学习程序。我会给大家详细介绍什么是面向对象,什么是面向过程。要理解面向对象,我们必须首先了解面向过程。在你理解了面向过程之后,我们就不能再盲目地为OOP进行OOP了,那样只会徒劳无功,因为很多时候,我们写一些代码只是为了解决一件小事,所以我们不需要写OOP,只需要写一些面向过程的代码,用一个词来形容“因地制宜”。
让我们从面向过程开始,先解释一下过程是什么意思。我们通常所说的“程序”实际上是一个过程,即执行一个程序。比如上班是一个程序,在这个程序中,流程是9: 00准时到达公司,做一些我们应该做的事情。下午6点,不管是什么,上班的流程结束了,离开公司就是流程。让我们举一个更具体的例子,撤回和执行的过程,我们会写得更清楚:
1.把你的银行卡带到自动取款机上。
2.插入银行卡。
3.输入密码。
4.输入取款金额。
5.自动取款机纸币。
6.把钱放进你的口袋。
6.如果你发现你没有得到你想要的号码,回到步骤4。
7.如果要打印收据,请单击打印收据;如果没有打印,则省略该步骤。
8.还卡。
9.节目结束了。
从上面的步骤可以看出,从第一步到最后一步,这是执行顺序,第4步到第6步是循环过程,第7步是分支过程,这是过程,也就是程序。我们写代码的目的是模拟一些行为过程,以计算机高速计算的特性服务于我们的生活。
我们可以把取款打包成一个函数,这样就是一个独立的过程。必要的时候,我们可以调用这个函数来完成我们的工作需求。下面,我们将用一个最简单的例子来表达一个最简单的程序流程。
功能吻老婆(全老婆){console.log(全老婆‘把脸凑在一起’);控制台日志(“我把嘴唇放在上面”);Console.log('木音');console . log(‘pro’whose life‘一旦完成’);} KiSS WireLess('我的妻子');
看图,在合适的时候,我们调用KissWife函数,输入合适的参数,我们就完成了一个过程。
OOP的目的是提高代码的复用率,用最少的代码做尽可能多的事情,使用参数,这也是面向对象编程的一种体现。我们举个反例。如果我们不使用参数,当我们想亲吻别人的妻子时,我们必须重写一个KissWife函数。这样我们写了很多重复的代码,不方便代码管理,不方便很多方法,不流畅。
这时有同学想问,我觉得,我觉得我不习惯用参数,就是不想传递参数,那么代码管理的不便在哪里呢?好了,这个问题问得挺到位的。
我来解释一下。如果我们在这个过程中发现有不合理的地方,需要修改,比如我想伸舌头什么的,就要在亲我老婆的功能(麻烦)和亲别人老婆的功能(麻烦1)中修改。当我们有很多类似的功能时,是否需要全部修改(麻烦n)?第二个缺点是修改较多。你能保证所有的修改不会一次出错吗?(很容易出错),说明如果我们只完整地写一些重复的代码,工作效率会大大降低。
通过以上解释,其实新手读者还是无法理解OOP(面向对象编程)是什么。我们现在从物体开始解释。这里的对象不能简单理解为我们谈恋爱时的男女朋友。对象指的是世界上的一切,太阳,大海,人,宠物…我们能想到的一切,每个物体都有自己的属性和行为。
我们可以这样理解,鸟是一个对象,它有自己的属性和自己的行为,然后我们用具体的代码封装一个关于鸟的类。(注意:在javascript语言中,function关键字不仅用于定义函数,还用于定义Classes。它不能像高级语言那样使用class关键字。后面讲到继承,我们会用特殊的方法来实现继承。).
//声明一个bird函数Bird(){ this.name='鸽子';This.color=' grayThis.habitat=' cageThis.weight=' 500}//原型链用来定义鸟的行,也可以用来定义属性。但是,属性通常使用这个关键字来声明//行为和属性。实际上,在同一级别上,我们使用for in来验证//call bird . prototype . sing=function(){ console . log('咕咕叫');}//eat bird . prototype . eat=function(){ console . log('吃了个玉米');}//flying bird . prototype . fly=function(){ console . log('天上飞');}//孵化鸟. prototype . brod=function(){ cossole . log('孵化鸽子蛋');}现在我们的类已经声明了,但是如何使用呢?现在只是上课,不是举例,就是我口头说的鸽子。一个具体的例子就是鸽子。我们怎样才能得到一只混凝土鸽子?请看下面的代码
//使用new关键字获取一个实例var gezi=new Bird();现在我们可以调用它的属性和方法。
这样,我们得到的每一只鸽子其实都是一样的。怎样才能得到有自己特色的鸽子?有自己独特的特点,其实属性是不一样的,所以我们修改函数语句。
//其实我们只需要修改函数bird (_ color,_ habitat,_ weight) {this。名称='鸽子';this.color=_ colorthis.habitat=_ habitatthis.weight=_ weight}然后我们来看看实例化一只鸽子时应该怎么做。
//我们实例化了两只鸽子var gezi_A=new Bird ('white ',' wild ',' 300g ')。Gezi _ b=newbird ('off-white ','温室',' 550g ');
这样,我们就可以建造出具有自己特色的鸽子。从上面的例子中,我们可以看到封装实际上是表达我们可以用类描述的对象,所以我们可以通过new关键字实例化对象。这个对象有自己独立的属性和行为。我们可以方便地操作这样一个物体。封装是体现面向对象的一种方式。我们首先封装一个类。然后,new举一个例子,这样我们可以比直接用代码构造鸽子类少写很多代码两次。如果我们也构造第三只鸽子,我们可以通过new再做一次。在构造对象的时候,我们会感受到一句代码。提高代码的复用率,OOP就是这样体现的。
这时有人问,只是在说使用OOP的好处,却没看到没有OOP怎么写代码,于是就想出了一个没有OOP的办法,以鸽子为例。
//声明一个鸽子函数GeZi_C(){ console.log('物种是鸽子');Console.log('颜色为蓝色');Console.log('住在树顶');Console.log('重量400克');Console.log('在天空中飞行');}//执行GeZi_C()一次;
如果我们想再声明100只鸽子,是否需要像上面这样写很多代码?这是面向过程的代码。相信新手朋友对OOP已经有了模糊的概念。慢慢感受。这种感觉一两天就会明白。一口吃不了一个大胖子。后面我们会继续讲OOP思想的继承和多态。
在前面的Bird类的声明中,说过属性和行为是在同一个层次上的,可以通过两种方式来声明。属性在构造函数中用这个关键字声明,行为函数用prototype关键字声明。原型是功能原型链的标准扩展。我们之所以这样写,是为了把javascript语言代入高级语言的范畴,模拟高级语言的使用。这还有很长的路要走。让我们首先验证Bird实例对象是否在同一级别。
//我们现在使用的是之前的Bird类var obj=new Bird(),不带参数;//为(var pro in obj){ console . log(pro ' : ' obj[pro])逐个打印出来;}
参见,的功能为.in是循环遍历对象的属性和数组的下标,而行为函数的名字实际上就是对象的属性。现在前面的说法已经得到了验证,相信大家现在对OOP封装思想都有了一定的了解。
综上所述,我们今天所说的其实就是对事物进行抽象拟态,然后将这些属性行为封装到一个类中,使用new关键字实例化具体的对象,大大提高了代码的利用率,提高了工作效率。
版权声明:javascript每天必须学习的包是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。