【面向对象基础知识】
  1. 封装:对于功能相同的代码,我们只需封装一次,以后再遇到类似的功能,只需调用即可,无需重写,避免大量冗余代码。
  2. 对象的特征:方法和属性;
  3. 面向对象的特点:
  • 封装:低耦合高内聚;
  • 继承:子类继承父类的属性和方法,但是不影响父类的功能;
  • 多态:主要包括重载和重写;
  • 备注:①重载:JS没有严格意义上的重载,但是有类似重载的功能,传不同的参数可以实现不同的功能,
                     ②重写:子类可以重写父类的方法属性;
【单例模式】(本质就是对象)
  1. 单例模式优缺点:
         (1)实现模块化开发,是最简单的模块化开发
                      ①不同模块之间的相互调用:对象名.属性名;
                      ②本模式之间的相互调用:this.属性名;
         (2)避免全局变量名的冲突
                注意:引入各个模块,需要注意引入顺序,引入顺序按照各个模块之间的相互依赖进行前后排列。
  1. 模块化开发:对于一个大型的项目,项目组合分配给不同的工程师同步开发,等所有的工程师都开发完成的时候,进行项目的随后合并。
【工程模式】(本质就是普通函数的封装)
    三步骤:
     (1)引进原材料——创建一个空对象;
     (2)加工对象   ——输出对象;给对象添加属性和方法;
     (3)输出产品——返回对象,return 对象;
   优缺点:
      优:避免了单例模式中的大量冗余代码,进行系统的封装;
      缺:跟系统内置类的调用方式不同;
【构造函数】(1.首字母大写,2.;3.构造函数中存放的都是私有属性和方法)
  1. 和工厂模式的不同;
          1)调用的时不同:
               工厂模式:调用的时候,只是普通的函数的调用
               构造函数模式:new   CreatPerson();
          2)函数体内不同;
               工厂模式三步:创建对象;加工对象;返回对象;
               构造函数:只有加工对象,因为系统会默认为其创建对象和返回对象
     2.构造函数:可以创建一个自定义的类,并且可以new出实例,构造函数主要是实例和类打交道;
     3.细节:①构造函数中的this都是new出来的实例;②构造函数中存放的都是私有属性和方法;
    ③构造函数系统默认返回this,不建议手动返回,如果非要自己手动返回:
        a:手动返回的时字符串类型:对以前实例上的属性和方法没有影响;
        b:  手动返回的是引用数据类型:以前实例身上的属性和方法就会被覆盖,实例无法调用属性和方法
    ④构造函数再调用的时候,如果没有参数,小括号可以省略;
    ⑤构造函数就是类和实例在打交道;
    ⑥构造函数中带var跟实例没有任何关系,实例只跟this.xxxx有关;
【原型模式】
1.原型模式:主要是类  实例  和原型;
2.原型的基础知识:☆☆☆☆☆☆
   ①每个函数数据类型(普通函数,类)上,都有一个属性,叫prototype,是一个对象;
   ②prototype这个对象上,天生自带一个属性,constructor指向当前这个类;
   ③每个对象数据类型(普通对象,prototype,实例)都有一个属性,叫做__proto__;指向当前实例所属类的原型;
3.Object。prototype上面的属性和方法:
   hasOwnProproperty判断是否是私有;  
 判断公有属性:function hasPubProperty(attr, obj) {
    return attr in obj && !obj.hasOwnProperty(attr);}
  isPrototypeOf判断前一个对象是否在原型链上;  
   propertyIsEnumerable
4.条件反射知识点:
1)构造函数:构造函数中的属性和方法都是私有的;  
2)构造函数中的this都是实例;   
3)prototype上的属性和方法都是公有的;   
4)构造函数模式:实例和类;   
5)原型模式:实例 类  原型;
6)__prototype__:原型链;
7)当给  类.prototype={}   这样赋值的时候,constructor指向会出问题
【原型链】
定义:如果想查找  对象.属性名:
1.会先在自己的私有空间中进行查找,找到的话,说明X是私有属性
2.找不到:通过__proto__去当前实例所属类的原型上进行查找,找到的话,说明是共有属性;
3.找不到:继续通过__proto__去当前实例所属类的原型进行查找,找不到将继续通过__proto__一直找到Object
instanceof:检测实例属于某个类
“x” in Fn:判断某个属性是否再对象上,包括私有和共有属性;
.hasOwnProperty(' '):判断是否为私有属性;
IE下禁止使用__proto__;
【学习原型链模式的好处】:
1)了解系统提供的类的构成;
2)可以提供更多的学习机会,比如  ,ary.keys不知道;可以通过查询来扩充自己的知识范围;
3)可以给系统内置类扩充更多的方法,便于团队里的合作开发者。
【耦合与内聚】
耦合性:也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息
内聚性:又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。
所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。
耦合:一个软件结构内不同模块之间互连程度的度量。
对于低耦合,粗浅的理解是:一个完整的系统,模块与模块之间,尽可能的使其独立存在。也就是说,让每个模块,尽可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。这样有利于修改和组合。
 
  1. 类数组包含两种:1)arguments;2)元素集合;
 

JS学习:第一周——NO.3面向对象的更多相关文章

  1. 201671010140. 2016-2017-2 《Java程序设计》java学习第一周

       java学习第一周        本周是新学期的开端,也是新的学习进程的开端,第一次接触java这门课程,首先书本的厚度就给我一种无形的压力,这注定了,这门课程不会是轻松的,同时一种全新的学习方 ...

  2. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验【中英】

    [吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第一周测验[中英] 第一周测验 - 深度学习简介 和“AI是新电力”相类似的说法是什么? [  ]AI为我们的家庭和办公室的个人设备供电 ...

  3. Java学习第一周

    第一周学习了JDK的安装和环境的配置,初步了解了Java与C的不同之处,学习了Java的变量.基本数据类型.以及面向对象的基础.并且自行完成了一些简单Java程序的编写. (1)学习了为什么使用抽象类 ...

  4. 20165213 java学习第一周

    20165213 -2018-2<Java程序设计>第一周学习总结 教材学习内容总结 java的四个特点:面向对象.平台无关性.动态性.简单. java编写程序步骤:再有jdk的情况下,先 ...

  5. Java学习第一周博客

    20145307<Java程序设计>第一周学习总结 教材学习内容总结 首先学习安装Java有两种方法,一种是用Eclipse直接编辑输出,另一种方法是用记事本之后用win+G开启cmd运行 ...

  6. H5学习第一周

    已经接触H5一个周了,经过学习,总算对H5有了一些了解和认知,下面就总结一下我对H5的认知和感悟. 首先接触的是H5的常用标签[meta],它有其以下常用属性 1.charset属性.单独使用,设置文 ...

  7. Java学习第一周心得体会

    一周的学习很快就过去了,说说我个人的总结吧! 下面几个是我觉得需要牢牢记住的 1.Java的执行机制:先编译.再解释 2.变量以及基本数据类型 3.强类型编程语言:要求变量的类型与值的类型要一致 4. ...

  8. Three.Js学习第一天

    因为工作需求,最近接触到了ThreeJs库,国内学习文档的确少,所以在这里写下bolgs记录学习史,并且给后面学习的人尽一份微博之力. 3D场景依靠WebGL技术.目前支持比较好的浏览器,谷歌.火狐. ...

  9. Java for Android 学习第一周

    前言 专业Java程序员所必需掌握的3个主题: 1. Java编程语言 2. 使用Java的面向对象编程(OOP) 3. Java核心库 JDK.JRE和JVM 1. javac编译java源代码为字 ...

随机推荐

  1. list<T> 的使用方法。

    首先讲一个经常用到的Contains( )方法,用来测试一个元素是否在List内.这个功能跟SQL里面的" like % %"类似. 这个方法在数组中也存在,因为集合其实就是动态数 ...

  2. SpringMVC(四) RequestMapping请求方式

    常见的Rest API的Get和POST的测试参考代码如下,其中web.xml和Springmvc的配置文件参考HelloWorld测试代码中的配置. 控制类的代码如下: package com.ti ...

  3. [LeetCode] Unique Substrings in Wraparound String 封装字符串中的独特子字符串

    Consider the string s to be the infinite wraparound string of "abcdefghijklmnopqrstuvwxyz" ...

  4. IT培训行业揭秘(二)

    培训机构与高校之间是怎么"勾结"的? 每一个做院招的培训机构通常会有一个“院校关系”部门,这个部门就是专门为培训机构做疏通培训班与高校之间的关系的,通常这个部门都会拥有一张各大高校 ...

  5. NFS简单使用

    NFS网络文件系统(Network File System),由Sun公司开发,从名字上就能够知道这个服务是通过网络的方式来共享文件系统,目前RHEL 6上使用的版本为NFSv4,提供有状态的连接,追 ...

  6. iOS学习-创建带下划线的button

    UIButton *tempBtn = [UIButton buttonWithType: UIButtonTypeCustom]; tempBtn.frame = CGRectMake(, , , ...

  7. Uncaught SyntaxError: Invalid or unexpected token

    出现错误的地方:在Jquery中,调用有参数的方法,动态传递参数时报错 出现错误的原因: 动态传递参数的时候,参数中有换行符 错误的解决:参数传递之前,将换行符替换 var  temp = model ...

  8. BZOJ 2716: [Violet 3]天使玩偶

    2716: [Violet 3]天使玩偶 Time Limit: 80 Sec  Memory Limit: 128 MBSubmit: 1473  Solved: 621[Submit][Statu ...

  9. Boost.Python简介

    Boost.Python简单概括:是Boost库的一部分:用来在C++代码中调用python代码以及在Python代码中调用C++代码,并且避免用户直接操作指针. 以下内容搬运自:https://wi ...

  10. [C#] 日志类

    在程序发布到服务器上的时候,不能在像本地执行一样可以调试,在发生错误时候,往往不能很方便的查找错误.将错误信息写入文件是一种比较常用的处理方法.以下是一个日志类,实现以下功能: 1)按日期每天生产不同 ...