错误之处,欢迎指正。
1. 面向对象和面向过程
以将大象放进冰箱举例:
- 面向过程:思考的切入点是功能的步骤。
function openDoor() {} //开门
function elephantIn() {} //放进冰箱
function closeDoor() {} //关门
- 面向对象:思考的切入点是对象的划分。
function Elephant() {} //构造函数大象
function Fridge() {} //构造函数冰箱
Fridge.prototype.openDoor = function () {} //开冰箱门方法
Fridge.prototype.closeDoor = function () {} //关冰箱门方法
Fridge.prototype.in = function () {} //放入冰箱方法
const f = new Fridge(); //创建一个冰箱
f.openDoor(); //打开该冰箱的门
const e = new Elephant(); //创建一个大象
f.in(e); //将大象放入冰箱
f.closeDoor(); //关闭冰箱门
从上面代码可以看出,面向过程的写法更为简洁,但是不利于后期的维护修改;相反,使用面向对象的方法,只需要去关注该对象上的方法,对于后期维护,只需要在方法上做手脚。没有绝对的好与坏,需要依照需求来决定选取哪种方法。
2. 构造函数
- 传统的构造函数属性和方法定义分离。
- 原型上的属性会被枚举。
- 构造函数依然可以当作普通函数使用。
3. 类
在面向对象式编程中,把对象的所有成员定义称之为一个类。
class Animal {
constructor(name, age){
this.name = name;
this.age = age;
}
print() {
console.log(this.name);
console.log(this.age);
}
}
-
class
不存在变量提升,存放于暂时性死区。 -
class
里的方法都不可枚举。 -
class
必须使用new
调用。 -
static
关键字;静态成员,函数的本身是对象,函数上面本身的成员就是静态成员,不能被实例访问到,只能通过构造函数本身使用。