JS-面向对象(编程思想、工厂模式、优点)

一.面向对象基本介绍

1,什么是面向对象
    所谓的面向对象,是一种编程思想,编程思路,代码的书写格式

    之前为了简化代码,我们是将程序封装为函数的形式来调用
    函数会有一些小问题:
        函数内部定义的局部作用域变量,函数外部无法直接调用
        函数调用使用时,会占用大量的系统内存,容易造成数据溢出数据泄露,容易被黑客攻击
        函数一般只是封装一些模块化的功能

    复杂程序的封装会,封装成其他形式,使用面向对象的方式来封装程序

2,简单介绍面向对象的编程思想
    
    我们之前的编程方式,称为面向过程的编程方式

    面向过程和面向对象编程思想的区别
    
    举例生活中的实例 : 中午要吃饺子
        面向过程
        1,和面
        2,和饺子馅
        3,包饺子--擀皮,放馅,包饺子
        4,烧水
        5,水开了煮饺子
        6,捞饺子
        7,吃饺子

        面向对象
        1,找一个饺子馆 --- 封装的面向对象的程序,完成制作饺子的过程,我们只要点就可以了
        2,点饺子 --- 调用封装的程序
        3,做好了吃饺子
        4,结账

        总结
            面向过程 : 自己独立的一步一步的完成程序的定义和执行
            面向对象 : 有封装好的面向对象的的程序
                        直接调用执行就可以了
                        功能和作用类似于 封装好的函数
                        但是 封装的语法和思想与函数不同

二.对象的再介绍

为什么要面向对象,不是面向字符串等

对象的优点
1,对象中,可以定义并且存储多个数据单元以及所有JavaScript支持的数据类型
    const obj = {age:18,name:'张三',fun:()=>{},arr:[1,2,3,]}
2,对象中,调用具体数据很方便
    调用数据时,不用考虑数据的顺序
    const obj1 =  {age:18,name:'张三'}
    const obj2 =  {name:'张三',age:18}
    调用 name 和 age 都是不用考虑 数据单元的顺序
    只要键名/属性 输入正确就可以了
3,对象中,可以定义函数,还可以通过函数的this,方便的调用对象本身的数据
    const obj1 =  {age:18,name:'张三',fun:function(){ console.log(this.name) }}
    const obj2 =  {age:18,name:'张三',fun:function(){ console.log(this.name) }}
    调用对象的数据,不用管对象名称 是什么,只要通过this,就可以指向这个对象, 
    obj1 中的 this,指向的就是obj1   obj2 中的 this,指向的就是obj2
    this.name  分别就是 obj1.name  obj2.name  

三.面向对象编程的基本思想

面向对象的基本思想
基本思路就是,创建一个对象,给这个对象,添加上属性和属性值,还有函数等方法
之后通过操作这个对象,来完成需要的效果

// 先通过一个函数的方法,来创建对象

function createObj(){
    // 创建对象
    const obj = {};

    // 给对象添加属性和属性值
    obj.name = '张三';
    obj.age = 18;
    obj.addr = '北京';
    obj.sex = '男';

    // 给对象添加方法
    obj.funNameAge = function(){
        console.log(this.name , this.age);
    }
    obj.funNameAddr = function(){
        console.log(this.name , this.addr);
    }
    obj.funSexAge = function(){
        console.log(this.sex , this.age);
    }
    obj.funAll = function(){
        console.log(this.name, this.sex , this.age, this.addr);
    }

    // 返回这个创建好的对象
    return obj;
}

// 调用函数,函数创建对象,并且作为返回值
// 变量中存储的就是函数创建的对象
const obj = createObj();

// 可以通过调用obj中存储的对方的方法,来实现功能
obj.funAll();

四.工厂模式

工厂模式
所谓的工厂模式,是一种书写函数的语法形式,语法规范
就向工厂中的流水线一样,按照步骤来执行需要的操作
步骤1,创建对象
步骤2,给对象定义属性和属性值
步骤3,给对象添加方法
步骤4,定义对象为返回值

// 标准的工厂模式,会有对应的参数

function createDumpling(pi,mian,xian,/* tioliao */){
    // 创建包饺子对象
    const dumpling = {};

    // 给包饺子对象,添加属性
    dumpling.pi = pi;
    dumpling.xian = xian;
    dumpling.mian = mian;
    /* dumpling.tiaoliao = tiaoliao; */

    // 给包饺子对象,添加方法

    // 和面
    dumpling.huomian = function(){
        console.log(this.mian);
    }

    // 和饺子馅
    dumpling.huoxian = function(){
        console.log(this.xian);
    }

    // 包饺子
    dumpling.bao = function(){
        console.log(this.xian,this.pi,this,mian);
    }

    // 煮饺子
    dumpling.zhu = function(){
        console.log('煮饺子了,等着吃吧');
    }

    // 返回包饺子对象
    return dumpling;
}

// 要开始包饺子

// 创建一个执行包饺子功能的对象,并且输入参数

const baojiaozi1 = createDumpling('薄皮' , '白面粉' , '猪肉大葱');

const baojiaozi2 = createDumpling('厚皮' , '玉米面' , '鱼香肉丝');


console.log(baojiaozi1);
// 可以调用任意的封装的方法
baojiaozi1.huoxian();   // 调用和饺子馅方法
baojiaozi1.huomian();     // 调用和面方法

五.面向对象编程的优点

面向对象编程的优点
    优点与函数的优点类似
高内聚  低耦合
高内聚 : 将所有需要的程序,都定义封装在对象内
        对象中存储所有需要的属性,所有需要的方法
低耦合 : 尽量减少特殊程序的执行

面向对象编程的特点
    抽象 --- 通过描述 对象 共有的特点(属性和属性值) , 来形容一个对象
            这个对象不是一个非常具体事例的内容,是一个抽象化的实例
        制作饺子,制作包子,制作馅饼,制作馅窝头...
        比如有皮,有汁,味甜 --- 西瓜 , 橘子 ,, 爆浆蛋糕 , 夹心糖果 ...
        再比如四条腿的,有一个面的 --- 桌子 , 凳子 ,... 
    
    封装 --- 将所有的程序,都定义在一个对象中
发布了125 篇原创文章 · 获赞 4 · 访问量 2844

猜你喜欢

转载自blog.csdn.net/DcTbnk/article/details/105432404