一:面向对象
1.面向对象基本特征
封装:也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏
继承:通过继承创建的新类称为“子类”或“派生类”。继承的过程,就是从一般到特殊的过程
多态:对象的多功能,多方法,一个方法多种表现形式
2.javascript和面向对象
javascript是一种基于对象(object-based)的语言。但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类)—–Es6以前是这样的。所以es5只有使用函数模拟的面向对象
二:javascript对象
在 JavaScript中,几乎所有的事物都是对象
1.在JS中的对象定义
一个对象由多个成员组成,每个成员都有一对键值对,然后需要用逗号隔离成员
2.对象属性
JavaScript 对象是属性变量的容器。键值对通常写法为 name : value (键与值以冒号分割)。键值对在 JavaScript 对象通常称为 对象属性
3.访问对象属性
(1)点表示法 eg:person.age;
(2)方括号表示法 eg:person["age"]
4.对象方法
对象的方法定义了一个函数,并作为对象的属性存储
对象方法通过添加 () 调用 (作为一个函数)
5.访问对象方法
eg:
methodName : function() {
// 代码
}
访问:objectName.methodName()
6.Javascript中的"this"关键字
面向对象语言中 this 表示当前对象的一个引用
但在JavaScript中this不是固定不变的,它会随着执行环境的改变而改变。
在方法中,this 表示该方法所属的对象
如果单独使用,this 表示全局对象
在函数中,this 表示全局对象
在函数中,在严格模式下,this 是未定义的(undefined)
在事件中,this 表示接收事件的元素
类似 call() 和 apply() 方法可以将 this 引用到任何对象
7.构造函数
(1)所谓“构造函数”,就是专门用来生成实例对象的函数。它就是对象的模板,描述实例对象的基本结构
一个构造函数,可以生成多个实例对象,这些实例对象都有相同的结构。都可以使用这个构造函数的属性与方法
为了与普通函数区别,构造函数名字的第一个字母通常大写
(2)特点
函数体内部使用了this关键字,代表了所要生成的对象实例
生成对象的时候,必须使用new命令
(3)构造函数的new关键字
new命令的作用,就是执行构造函数,返回一个实例对象
new 就是创造对象的过程
new 也叫做实例化对象的过程
new 创造出来的对象叫做构造函数的 实例对象
三:对象原型
1.js原型
JS的每个函数在创建的时候,都会生成一个属性prototype,这个属性指向一个对象,这个对象就是此函数的原型对象。该原型对象中有个属性为constructor,指向该函数。这样原型对象和它的函数之间就产生了联系
2.js原型链
(1)原型对象也会有它自己的原型,逐渐构成了原型链。原型链终止于拥有 null 作为其原型的对象上
(2)指向对象原型的属性并不是 prototype。它的名字不是标准的,但实际上所有浏览器都使用 __proto__。访问对象原型的标准方法是 Object.getPrototypeOf()
(3)当你试图访问一个对象的属性时:如果在对象本身中找不到该属性,就会在原型中搜索该属性。如果仍然找不到该属性,那么就搜索原型的原型,以此类推,直到找到该属性,或者到达链的末端,在这种情况下,返回 undefined
3.属性遮蔽
当父子类定义了同名的熟悉给,并不是覆盖了父类的属性,是属性遮蔽
4.设置原型
方法:
(1){}
(2)new Object()
(3)使用字面量
(4)工厂模式
(5)构造函数模式(constructor)
(6)原型模式(prototype)
(7)构造函数+原型模式
(8)Object.create()
5.自有属性
(1)构造函数本身的属性。通过对象的引用添加的属性。其他对象可能无此属性;即使有,也是彼此独立的属性
(2)使用hasOwnPropertype()方法检测对象是否具有指定的自有属性
6.原型属性
(1)通过原型所定义的属性。用于共享属性和方法。从原型对象中继承来的属性,一旦原型对象中属性值改变,所有继承自该原型的对象属性均改变
(2)使用in关键字检测对象及其原型链中是否具有指定属性
四:Javascript中的类
1.类
类是用于创建对象的模板,使用了class关键字来直接定义类,类本质上依然是构造函数
每个类中包含了一个特殊的方法 constructor(),它是类的构造函数,这种方法用于创建和初始化一个由 class 创建的对象
定义类:类声明和类表达式
eg:
//1.类声明
class Person{
constructor(){...}
}
//2.类表达式
var Animal = class{}
使用类:使用 new 关键字来创建对象,自动调用构造函数方法 constructor()
2.构造方法:
构造方法是一种特殊的方法:
构造方法名为 constructor()
构造方法在创建新对象时会自动执行
构造方法用于初始化对象属性
如果不定义构造方法,JavaScript 会自动添加一个空的构造方法
3.严格模式 "use strict"
类声明和类表达式的主体都执行在严格模式下。比如,构造函数,静态方法,原型方法,getter 和 setter 都在严格模式下执行
4.继承
使用extends关键字来声明这个类继承自另一个类
基于原型链的继承
(1)JavaScript 对象是动态的属性(指其自有属性)“包”。JavaScript 对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾
(2)JavaScript 并没有其他基于类的语言所定义的“方法”。在JavaScript 中,任何函数都被可以添加到对象上作为其属性。函数的继承与其他属性的继承没有差别,包括上面的“属性遮蔽”(这种情况相当于其他语言的方法重写)
5.封装
通过封装,控制类的属性与方法的可访问信息
关键字:private、public、protected
封装的三个好处: 程序低耦合、能够对类的内部结构进行设置可访问/不可访问、能够对内部成员进行限制
6.多态
成员方法的重载和重写
(1)重载
方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型
重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准
重载的规则:
1>必须具有不同的参数列表;
2>可以有不同的返回类型,只要参数列表不同就可以了;
3>可以有不同的访问修饰符;
4>可以抛出不同的异常;
(2)重写方法的规则:
1>参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载
2>返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载
3>访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
4>重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。