js:深入面向对象

面向对象

又是面向对象。。。。。。

其实不止操作系统,很多系统的管理模式都是用面向对象的模式管理的

管理者并不在乎你每个人的个体特征。

在公司里,老板让你买咖啡,并且他很急。买咖啡有多种方式,例如点外卖、自己到楼下购买、托正在外面的同事捎来或者给老板花超绝三块钱冲雀巢等等。然后你就问老板说:老板,那我是去点外卖还是自己买还是给你冲速溶咖啡还是......老板根本不在乎你说的什么,他只会告诉你:不管怎样,我只要我的桌子上放有咖啡。

员工只要搞到咖啡就好了,而老板考虑的就多了(勾潮的鸣式还在追我

老板这个命令就叫面向对象(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)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值