美文网首页
面向对象

面向对象

作者: 你怀中的猫 | 来源:发表于2022-05-10 17:05 被阅读0次

    1、面向过程

    • 先将解决问题所需要的步骤分析出来,再用函数将这些步骤实现,按照业务一个一个的依次调用这些函数,从而解决问题。

    2、面向对象

    • 先将参与问题的对象分析出来,然后分析这个对象在这个问题中所具备的属性和行为,重点是研究参与问题的各个对象
    • 面向对象的优势:
      1、维护简单
      2、可扩展性
      3、代码重用性
      4、代码效率高

    3、对象 (万物皆对象)

    • 对象中所有的值都是以键值对的形式来存在的
    • 如果键值对的值是一个具体的值,则这个键值对就叫对象的属性。
    • 如果键值对的值是一个函数,则这个键值对就叫对象的方法
    var obj = {
         name : "张三",  //对象的属性
         say : function(){   //对象的方法
             console.log(wedqwd);
         }
    }
    

    4、抽象

    • 在很多对象中按照某个共同的特征归为一个类,这个过程就叫抽象。

    5、类

    • 是具有共同特征的对象的集合
    • class 在 java php等语言中 类由class来声明
    • 在js中我们可以通过构造函数的形式来定义一个类。
    • 构造函数,首字母必须大写

    6、this指向

    • 当构造函数,没有实例化 之前,其中this指向window
    • 当构造函数实例化之后,其中this指向 实例化出来的对象

    7、原型对象

    • 实例化对象的时候,传参是给对象的属性传入具体值,而构造函数中,定义的方法其传参是在使用这个方法时,在传进去,不是定义类的时候给它传。
    
        //定义一个人类
        function Person(names) {
            this.type = '人类';
            this.names = names;
            this.say = function (t) {
                console.log(this.names + "说:" + t);
            }
        }
    
        var qiang = new Person('强哥');
        var tan = new Person('摊主');
    
        qiang.say('你这挂管用吗');
        tan.say('不管,十年大礼包,滚');
    
    • 当实例化出来的对象,有特有的方法或者属性时,可以直接给这个对象添加
    qiang.kan = function () {
            console.log('强哥掏出🔪,额宰');
    }
    qiang.kan();
    
    • 原理:
      1、对象的方法或者属性,在执行或者使用的时候,会先在对象本身去查找这个方法或者属性
      2、如果找到就调用,如果找不到,就去他的原型对象中去找
      3、如果在原型对象还找不到,就去原型对象的原型对象里去找(原型链)
      4、直到找到位置,找到就调用,找不到就报错

    8、原型链

    • 所有的对象都有原型对象
    • 我们可以通过原型对象给已经封装好的类,添加公有方法或属性
        //给数组对象添加一个排序的方法
    
        Array.prototype.pai = function () {
            this.sort(function (a, b) {
                return a - b;
            })
            console.log(this);
            return this;
        }
        var arr = new Array(657, 678, 23, 567, 3, 6, 7, 89, 45, 2)
        console.log(arr);
        arr.pai();
    
        //给字符串原型添加去除违禁词的方法(可以去除一个、多个)
    
        String.prototype.wj = function(arg){
            //一个违禁词时, arg是一个字符串
            //多个违禁词时, arg是一个数组
            console.log(typeof(arg));
            //根据传入的参数判断有几个参数 
            if(typeof(arg) == 'string'){
                console.log('一个参数');
                //定义正则
                var reg = new RegExp(arg,'g');
                //修改违禁词
                var str1 = this.replace(reg,'*');
            }else if(typeof(arg) == 'object'){
                console.log('多个参数');
                //使用for循环,将所有的违禁词循环
                var str1 = this;
                for(var i = 0; i < arg.length; i++){
                    console.log(arg[i]);
                    //根据违禁词设置正则
                    var reg = new RegExp(arg[i],'g');
                    str1 = str1.replace(reg,'*');
                }
            }else{
                console.log('参数错误');
            }
            return str1;
        }
    

    9、arguments

    • 可变参数数组
    • 当使用arguments的时候,不能写形参,直接写实参
    • 实参会自动出现在函数的arguments属性中
    • arguments是函数原型中的一个属性
    • 它是一个伪数组,可以当成数组来使用,(但是不能使用数组的操作方法)
        function Person() {
            this.names = arguments[0];
            this.age = arguments[1];
            this.sex = arguments[2];
            this.cla = arguments[3];
            this.school = arguments[4];
            this.say = function () {
                console.log('你好,我是' + this.school + this.cla + this.names);
            }
        }
    

    相关文章

      网友评论

          本文标题:面向对象

          本文链接:https://www.haomeiwen.com/subject/uhrdurtx.html