如何学好高阶函数“零基础必看”

446 阅读3分钟

高阶函数

了解什么是面向对象?

  1. 面向对象 : 是 一种注重结果的解决问题 思维方式 面向过程 : 注重的是过程 面向对象 : 注重的是结果

2.面向对象与面向过程区别

  用别人的对象: 好处效率高    坏处不利于维护
  自己写的对象: 好处维护方便  坏处效率低
  今后实际开发中如何运用面向对象开发思维 

小技巧:今后实际开发中如何运用面向对象开发思维 当拿来一个需求的时候,先不要急着写,而是去网上找有没有现成的框架。如果有,则下载CV搞定。如果没有再自己写。

面向对象代码演示

<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  <title>Document</title>
</head>

<body>
  <div>div1</div>
  <div>div2</div>
  <div>div3</div>
  <p>p1</p>
  <p>p2</p>
  <p>p3</p>
  <p>p4</p>
  <script>

    //需求: 给页面每一个div标签 和 p标签 设置颜色 和 边框

    /* 1.面向过程 : 注重过程 
      特点:代码冗余
      */

    

    /* 2.面向对象
      (1)函数封装 :
          全局变量污染 : 
      (2)对象封装: 
    */
    let obj = {
      setColor: function (list, color) {
        for (let i = 0; i < list.length; i++) {
          list[i].style.backgroundColor = color
        }
      },
      setBorder: function (list, border) {
        for (let i = 0; i < list.length; i++) {
          list[i].style.backgroundColor = border
        }
      }
    }

    obj.setColor(divList, "red")
    obj.setColor(pList, "cyan")
  </script>
</body>

</html>

内置对象

工厂函数

工厂函数(了解).jpg

数组对象

    <script>
        /*  一定要练习哟,不然学完就会忘
        内置对象: js作者提前封装好的对象 
        */

        //声明数组
        let arr = [10, 20, 30]
        //1.arr.concat(数组),连接数组 得到一个连接后新数组
        // 应用场景:下拉加载更多的时候,连接到原来数组后面。
        arr = arr.concat(40, 50, 60, )
        console.log(arr); //[10,20,30,40,50,60]

        // reverse()  :翻转数组
        // 应用场景 电商类 销量 价格 距离 点击之后就会翻转显示
        arr.reverse()
        console.log(arr);

        // 数组排序
        // arr.sort()
        let newArr = [20, 50, 10, 3, 6, 4, 80, 7, 9]
        newArr.sort(function (a, b) {
            // return a - b //从小到大
            return b - a //从大到小
        })
        console.log(newArr);
    </script>

字符串对象

        /* 一定要练习哟,不然学完就会忘记 */

        let str = '黑马程序员武汉大前端女神节快乐!'
        // 字符串类似于数组, 也有长度 + 下标
        console.log(str.length)
        console.log(str[2])

        // str.indexOf('字符串')  :返回字符串在str中的首字符下标
        // 如果存在,则返回首字符下标  如果不存在 则返回固定值 -1
        let index1 = str.indexOf('武汉')
        console.log(index1); //5
        let index2 = str.indexOf('女神')
        console.log(index2); //10
        let index3 = str.indexOf('干饭')
        console.log(index3); //-1
        let index4 = str.indexOf('黑大')
        console.log(index4); //-1

        
    </script>

原型对象

    1.原型对象是什么? :  任何函数被创建的时候系统会自动创建一个对应的对象,称之为原型对象
    2.原型对象作用? : 内存浪费 + 变量污染
    3.原型对象相关三个属性 : 描述 构造函数 原型对象  实例对象 三者关系
    1.prototype :  属于构造函数,指向原型对象
    *作用  解决构造函数浪费内存 + 变量污染
    2._proto_ : 属于实例对象, 指向原型对象
    *作用  让实例对象直接使用原型的成员 (函数 + 属性)
    3. constructor : 属于原型对象,指向构造函数
    *作用  让实例对象知道自己的构造函数是谁

构造函数new关键字的原理面试题

  1. 创建新对象

  2. 构造函数this指向新对象

  3. 执行构造函数代码,修改this,添加新的属性

  4. 返回新对象

内置构造函数

在 JavaScript 中最主要的数据类型有 6 种:

基本数据类型:字符串、数值、布尔、undefined、null

引用类型: 对象

了解原型对象函数内部方法缺点 :浪费内存资源

代码演示

            this.name = name
            this.age = age
            this.cet = function () {
                console.log('吃肘子');
            }
        }
        let p1 = new Person('小刘', 19)
        let p2 = new Person('小红', 19)
        console.log(p1, p2);
        console.log(p1.cet === p2.cet)  //是错误的 因为p1和p2都是方法
        并且代码一致引用类型比较的是地址 他们的地址不相同 结果为false
        

解决方法 使用全局变量 弊端 造成变量污染 使用对象 :解决内存浪费 + 变量污染

代码演示2

        function Person(name, age) {
            this.name = name
            this.age = age
        }
        // 2.原型对象
        Person.prototype.eat = function () {
            console.log('吃东西');
        }
        // constructor 属于原型对象 , 指向构造函数
        // 可以让实例对象只但自己被哪一个构造函数创建
        console.log(person.prototype.constructor);
        person
        // 实例对象
        let p1 = new Person('班长', 20)
        console.log(p1);

        // 查看p1原型
        console.log(p1._proto_.constructor);
        console.log(p1._proto_ === Person.prototype);true
        

内置对象:属于object类型,是js作者提前写好的对象,里面存储了一些属性和方法,方便开发者直接使用

 Math:数学对象
 Date:日期对象
 Function:函数对象
 RegExp:正则表达式
 Array:数组对象
 Stringstring对象
 Booleanboolean对象
 Numbernumber对象

值类型与引用类型

a.值类型(基本数据类型):栈中存储的是数据,赋值拷贝的是数据,修改拷贝后的数据对原数据没有影响
b.引用类型(复杂数据类型):栈中存储的是地址,数据存在堆中,赋值拷贝的是地址,修改拷贝后的数据对原

构造函数、原型对象、实例对象三者关系

1.构造函数有一个属性prototype,指向自己的原型对象
2.实例对象有一个属性__proto__指向自己的原型对象
3.原型对象有一个属性constructor,指向自己的构造函数

原型.jpg

多一句没有,少一句不行,用最短时间,教会最实用的技术!