面向对象(OO,Object-Oriented)
1.定义:
抽象点说:面向对象是一种对现实世界理解和抽象的方法。
具体而言,抽取功能相似的代码归成一类,然后把相关的描述细节挂在原型上的一种编程方式。就是面向对象。
什么是类: class 类(Class)是面向对象程序设计实现信息封装的基础。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。
把具有相同特质的事物归为一类,具有相同的功能的代码块,类是一种用户定义类型,也称类类型。
每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。
比如水果就是一个类,苹果,香蕉,橘子都是水果类。
2.工厂模式
面向对象就是通过一个类去生成实例化对象。这个类就是一个工厂函数。我们在工厂里加工出具有相同属性和方法的产品出来。
比如把一个水果园看做是一个类,里面产出苹果橘子,他们都是累的实例化对象,具备水果的属性和方法。
用代码表示一下:
function Fruit(name,color){
// 构造函数
let obj = {
name,
color
};
obj.taste=“好吃”;
obj.eat= fn;
function fn(){
alert(this.name);
}
return obj;
}
let fruit1 = new Fruit("苹果","红色");
console.log(fruit1 );
Fruit就是一个类,fruit1是他的实例化对象,我们通过new Fruit产生了一个水果对象存在fruit1中。
所有的实例化对象都具备name,color,taste的属性。具备eat的方法。
可以通过fruit1.taste获取到“好吃”,也可以通过fruit1.eat()调用来弹出她的名字是“苹果”。
关于new,new 是一元函数运算符,有以下作用:
- 加了 new 之后,函数就会执行 - 括号只是用来传参的,不传参的话,可以不写括号(比如,fruit1=new Fruit) - new 之后,函数中的this 指向 构造函数 - new 运算之后,如果 return 的是个简单类型(Number,String,boolean,undefined,null,Symbol)的数据,返回值是构造函数的实例化对象.
在进行类的封装的时候,我们需要先梳理一下逻辑:
第一步: 思考这个类 有哪些东西 是通用 (抽象的过程,比如水果类都有name,color,能eat) 第二步: 思考那些东西是需要在使用的时候 进行配置的 (比如水果有不同的的name和color,需要自行传入) 第三步: 思考 那些 功能 使用时,可能用到,就写成可以在实例上使用的方法 (比如Fruit类都可以eat) 第四步: 思考在什么情况下,实例可能需要做一些操作,封装成事件存在方法里。当出发这个事件的时候调用这个方法。
逻辑处理好之后就可以封装我们需要的类了。
这样的过程其实就是面向对象思想要表达的东西。