面向对象
又是面向对象。。。。。。
其实不止操作系统,很多系统的管理模式都是用面向对象的模式管理的
管理者并不在乎你每个人的个体特征。
在公司里,老板让你买咖啡,并且他很急。买咖啡有多种方式,例如点外卖、自己到楼下购买、托正在外面的同事捎来或者给老板花超绝三块钱冲雀巢等等。然后你就问老板说:老板,那我是去点外卖还是自己买还是给你冲速溶咖啡还是......老板根本不在乎你说的什么,他只会告诉你:不管怎样,我只要我的桌子上放有咖啡。
员工只要搞到咖啡就好了,而老板考虑的就多了(勾潮的鸣式还在追我
老板这个命令就叫面向对象(oop)他不在乎事情处理的过程;底层员工要做的就是处理好这些事情的过程。
面向对象就是把拥有复杂过程的事情抽象为一个类,比如在这里我们把自己买咖啡、点外卖、冲咖啡这种事情全部抽象为搞到咖啡(其实很像那些不近人情的上级会说:我不问过程只要结果呃呃)
本质上获得咖啡的途径,就是面向过程(opp)。也就是说,面向对象的最底层的实现方法还是面向过程。只不过在这里,面向过程被我们抽象为一个类。
按C++的STL来举例子:首先我们需要一个工具箱,里面装着我们需要的东西。于是我们先创造了工具箱这个东西;然后我们就要想在我们的工具箱里塞什么东西,比如说我需要一个排序的函数,需要一个求大值、最小值的函数;然后我们再去编写函数里面的内容,这个函数最里面的内容是面向过程,然后外边整体用的是面向对象的思想。
也就是说对特定对象先描述,再组织
————————————————之前写的部分
原文链接:https://blog.youkuaiyun.com/Au_ust/article/details/141108377
js里面向过程多一点,更多的面向对象可能会在ts里拓展
面向对象编程具有三大特性:封装、继承、多态。
封装:将对象的属性和方法打包
继承:子类可以继承父类已有的功能
多态:不同的类执行不同的方法有不同的结果
构造函数
封装是面向对象思想中比较重要的一部分,js面向对象可以通过构造函数实现的封装。
前面我们学过的构造函数方法很好用,但是 存在浪费内存的问题(因为this永远指向的是一个实例对象,每个实例对象不一样)
原型
原型对象
解决构造函数浪费内存的问题
原型是什么?原型就是构造函数里的一个属性
console.dir() 则用于详细输出一个对象的属性。当你使用 console.dir() 时,控制台会显示对象的属性列表,这对于调试复杂的对象结构非常有用。console.dir() 会递归地打印对象的所有属性和方法,而不仅仅是对象的字符串表示。
function Chusheng({ uname, gender }) {
this.name = uname;
this.gender = gender;
this.Sing = function () {
console.log('多才多艺的出生');
};
}
console.dir(Chusheng.prototype)
打印出一个对象
所以原型是构造函数的一个属性,指向一个对象,这个对象可以挂载函数,对象实例化不会多次创建原型上函数,节约内存(我们可以把那些不变的方法,直接定义在 prototype 对象上,这样所有对象的实例就可以共享这些方法。)
公共的属性写在构造函数里,公共的方法写在原型里
构造函数和原型对象中的this 都指向 实例化的对象
举个例子:求数组的最大值和求和
使用原型为数组编写自己的方法
const arr = [1, 2, 3]
//求最大值
Array.prototype.max = function () {
//直接传入this(函数的调用者、实例对象)
return Math.max(...this)
}
console.log(arr.max())//3
//求和
Array.prototype.sum = function () {
return this.reduce((prev, item) => prev + item, 0)