面向对象

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);
        }
    }
posted @ 2022-06-18 16:26  熊二Ei  阅读(43)  评论(0)    收藏  举报