流程词汇(Object Oriented)简称OO,它是一类程式设计观念,用于辅导他们怎样应付各种繁杂的合作开发情景。
这儿说的第一类(Object),意思就是表达形式,在流程词汇的观念中,它将所有人都看做是第一类,并以第一类为突破口去思索问题。
采用流程词汇的观念去合作开发流程,他们首先思索的是这个控制系统什么样第一类(表达形式),它各别有甚么特性(特征),又有甚么方法(行为),如此一来,就能把控制系统降解为两个两个的第一类,然后对每个第一类展开原则上研究,以降低控制系统的整体维数。自学流程词汇,他们不仅要自学它的控制技术科学知识,更重要的是自学此种思索流程的形式,此种观念形式跟他们往后合作开发流程有很大的差别。在往后,他们顺利完成两个机能的时候,往往思索的是顺利完成该机能的关键步骤,先做甚么,再做甚么,如果好不好,就怎么好不好……,此种往后的观念模式,他们称作面向全国操作过程。
面向全国操作过程并绝非严重错误的,只是它面对繁杂的问题时显得有些力不从心。
面向全国操作过程和流程词汇最大的差别在于,面向全国操作过程思索的关注点和突破口是事情,流程词汇思索的关注点和突破口是表达形式。
在流程词汇的当今世界中,它将所有人都看做是第一类。这儿的第一类,应有尽有,它能是现实生活当今世界中看不见觉果的虚拟:人、狗狗、狗狗、飞机、凳子、钢笔、电视节目Bokaro,都能看做是第一类。它也能是某些领域中的抽象化体:订货、价格打印机、dom原素、年份Bokaro,它也被看做是第一类。
因此,在OO的当今世界里,有一句结语——所有人皆为第一类。
javascript词汇是支持流程词汇合作开发的词汇,本系列产品讲义中,将一点一点传授怎样采用它展开流程词汇合作开发,同时会进一步追寻它另一面深层的基本原理。注意:本系列产品讲义的关注点,将放在流程词汇合作开发的控制技术微观(即面向全国对象程式设计,Object Oriented Programming,OOP)。
对于流程词汇价值观微观(即流程词汇设计,Object Oriented Design,OOD),本讲义不做过多传授。因为流程词汇价值观的创建绝非难事,它绝非靠读该文这样的话的,虽然好的该文能对你有启迪作用,但更多的,此种价值观是靠Bazelle的标识符量练出的,是靠不断的分析、重设想出的。本讲义希望的是,你能够通过自学流程词汇合作开发,唤起你的思索,引起你对另一类合作Attichy的关注,逐渐创建起流程词汇的观念。
创建第一类
第一类即表达形式,所有人皆第一类。
其实你在之前的合作开发中,应该不止一次的接触过第一类,有些是浏览器自带的第一类,比如:dom第一类、window第一类、document第一类等;有些则是你根据机能需要自己创建的,比如:用户第一类、学生第一类等。
在JS中,创建两个第一类非常的简单,通过一对{}即可创建两个第一类,下面的标识符你应该并不会陌生:
上面的标识符应该这样理解,创建了两个第一类,分别把它赋值给了变量user1和user2。
为甚么要强调这一点呢?因为真正的第一类绝非user1和user2,而是那一对大括号及其里面的内容{…},在后面传授第一类赋值基本原理时还会详细传授这一点。
上面此种创建第一类的写法,即采用两个大括号来表示第一类{…},叫做第一类的字面量表示法。
采用字面量表示法来创建第一类的好处是简单易懂,但它不好的地方在于无法应用流程词汇合作开发中的一些高级特性。下面的标识符,展现了另一类创建第一类的形式,即采用关键字new来创建第一类:
这样的标识符虽然看似繁琐了很多,但实际上它才是第一类原本的创建形式。上面的标识符和第一类形式效果完全一致。
实际上,在JS词汇中,所有的第一类都是采用new关键字创建的。即便你采用的是字面量表示法,JS引擎最终也会将其转换为此种形式。因此,第一类的字面量表示法仅仅是JS词汇的两个语法糖,要创建第一类,最终都是要采用new关键字的。因此,在后文中,每两个示例,我都会用两种形式来实现第一类的创建。
语法糖(Syntactic sugar),也译为糖衣语法,是指词汇微观的一些便捷语法,它仅仅是为合作开发者提供的一类高效的编码形式,并不改变底层的实现基本原理。特性和方法
他们往后采用第一类,往往是为了将多个变量整合到两个变量上,其实,此种价值观就是流程词汇的一类核心价值观——封装。
面向第一类有三大显著特征:封装、继承、多态
那些整合到两个第一类中的变量,他们称作第一类的特性。特性往往是两个名词,表示第一类所拥有的特征。第一类的特性还能是两个第一类或者数组或者其他任意类型,用于表示多层次的结构:
第一类除了有特征,还会有一些行为,这些行为他们称作第一类的方法。方法往往是两个动词,表示第一类所拥有的行为,在代码微观,方法表现为函数。
能看出,方法和特性在书写上并没有本质的差别,只不过特性是两个普通的值,方法是两个函数而已。
this关键字
他们现在考虑一下,在之前的示例中出现的sayHello方法,假设他们现在要对其机能做一点改造,他们希望该方法要输出第一类的姓名和账号,于是,得到了下面的标识符:
此种形式结果固然正确,但是考虑一下100个用户的情景……不敢想象是不?这还仅仅是两个打招呼的方法,如果方法里面标识符多一点,繁杂一点,会更加棘手。
由于同一类第一类(比如这儿的用户第一类)都具有共同的行为——打招呼,他们何不把这个方法函数提出呢?就像下面这样:
这样虽然解决了标识符重复的问题,但新的问题又来了,虽然他们知道每个用户第一类都具有打招呼的方法,但是每个第一类的特性值不一样,打招呼的时候,我到底输出哪个第一类的特性值呢?
于是,JS给他们提供了两个关键字this,它指代的是当前第一类,即调用方法的第一类,于是他们就能解决这个问题了:
他们在sayHello函数中采用了this关键字,当函数运行时,该关键字指代调用该函数的第一类,即谁在调用我,我里面的this就指代谁。在阅读标识符的时候,你能把this读作我的,以便于你理解它。
借助了神奇的this关键字,就解决了重复标识符的问题,之后无论创建多少个用户第一类,他们都能采用同两个方法了。
关于this关键字,目前你需要记住以下两点:
this关键字只能书写在函数内。
this关键字在函数运行的时候才能确定指代的是谁,函数运行前谁也无法知道它将指代谁。
由于javascript词汇本身的特性,函数中的this关键字会带来很多坑(比如直接调用sayHello函数,this指代谁呢?)。后面会专门拿一章出传授this。
总结
流程词汇(OO)是一类程式设计观念,以第一类为突破口分析解决问题,此种观念需要长期的练习才能逐渐创建,而他们自学的是流程词汇控制技术微观的东西。
创建第一类能采用字面量表示法和new关键字,字面量表示法是两个语法糖,JS引擎最终会将其变为new关键字形式创建第一类。
第一类包含特性和方法,分别表示第一类的特征和行为,它没有本质的差别,只是行为提现为两个函数
在函数中能采用this关键字来指代**当前第一类(调用函数的第一类)