写在前面
由于我是将笔记写在笔记本上,然后手打搬运过来,所以内容非常凌乱,可能只有我自己看得懂,所以各位见谅了。
面向对象
在编程中,我们拥有两种编程方式,一种是面向过程(OOP),一种是面向对象(OOP)。面向对象主要有三种特点,即:封装、继承与多态。
ES6中的类和对象
类:抽象;
对象:具体。
注意:
1、先有类,后有对象;
2、类里面共有的属性和方法必须加this使用;
3、类里面的this指向,谁调用指向谁,使用时也可以被this放进一个变量里
创建类和对象
class 类名{//类名习惯性首字母大写
constuctor(参数){
this.变量 = 参数;//constuctor里面的this指向创建的实例对象
this.方法
}
方法名(参数){
代码块;
}
};
new 类名();//创建对象
类的继承
class 父类{参数};
class 子类 extends 父类{
constuctor(参数){
super(参数);//调用父类的构造函数,并且必须在this之前调用
this.变量 = 参数;//ES6中没有变量提升,所以要加this实例化对象
}
构造函数
ES6——>ECMAScript6.0;
三种方法创建对象:
var obj1 = new Obj();//通过new实例化对象
var obj2 = {};//通过字面量方式创建
function Obj(参数){//类名首字母大写
codeblock;
};
var obj3 = new Obj();//通过构造函数的方式创建对象,但必须与new连用
new实例化过程
1、创建空对象;
2、让this指向这个对象;
3、给新对象添加属性和方法;
4、返回这个对象。
实例成员:函数内部通过this添加的,只能通过实例对象来访问;
静态成员:构造函数本身添加的成员,只能通过构造函数来访问。
构造函数好用,但存在内存浪费的问题,因为内部构造函数会开辟空间。
原型对象与原型
原型对象:prototype——>作用:共享方法。
把不变的方法放在原型对象中,所有的实例对象都可以共享这些方法。
一般,把公共属性放到构造函数的内部,公共方法放到原型对象中。
实例对象会自动添加__ptoto__属性,指向原型对象,它是一个非标准的内部属性,给查找机制提供一个查找方向。
首先查找自身,没有在查找原型对象。
原型对象中的constructor构造函数会指回构造函数本身。
构造函数、原型对象与实例对象三者之间的关系
构造函数——>.prototype——>原型对象;
原型对象——>.constuctor——>构造函数;
构造函数——>new——>实例对象;
实例对象——>.proto.constuctor——>构造函数;
实例对象——>.proto——>原型对象
原型链
构造函数的原型对象的__proto__原型指向Object的原型对象,Object的原型对象的__proto__原型指向null
JS的成员查找机制:按照原型链一层一层查找,并且遵守就近原则。
在构造函数和原型对象中的this都是指向实例对象
拓展内置对象
给数组对象Array添加各种方法,然后数组就可以直接调用,但不能通过添加对象的方法拓展内置对象。