• 2.继承总结方法


    **

    ## 继承

    **
    //ES6之前并没有给我们提供 extends 继承。我们可以通过构造函数+原型对象模拟实现继承,被称为组合继承。

    2.1 call()

    /* call方法:调用这个函数, 并且修改函数运行时的 this 指向
    * fun.call(thisArg, arg1, arg2, …)
    * thisArg :当前调用函数 this 的指向对象
    * arg1,arg2:传递的其他参数
    * */

    function fn(x,y) {
    console.log(‘我想喝手磨咖啡’);
    console.log(this);//this指向函数的调用者
    console.log(x+y);
    };
    var o = {
    name : ‘andy’
    }
    //fn();

    //1.call()可以调用函数
    //fn.call();

    //2.call()可以改变函数的指向
    fn.call(o,1,2);

    2.2 借用构造函数继承父类型属性
    核心原理: 通过 call() 把父类型的 this 指向子类型的 this ,这样就可以实现子类型继承父类型的属性。

    //1.父构造函数
    function Father(name,age) {
    //this指向的是父构造函数的对象实例
    this.name = name;
    this.age = age;
    }
    //2.子构造函数
    function Son(name,age,score) {
    //this指向的是子构造函数的对象实例
    //使父构造函数中的this指向子构造函数中的this
    Father.call(this,name,age);
    //还可以添加自己的属性
    this.score = score;
    }
    var son = new Son(‘刘德华’,22,99);
    console.log(son)

    //上述改变this指向问题可以使用断点解释其详细步骤:添加断点->刷新->点击下一步

    Father实例对象与Father原型对象的内存空间不一样,所以Son的原型对象添加exam方法时,不会影响到Father原型对象

    2.3 借用原型对象继承父类型方法
    一般情况下,对象的方法都在构造函数的原型对象中设置,通过构造函数无法继承父类方法。
    核心原理:

    1. 将子类所共享的方法提取出来,让子类的 prototype 原型对象 = new 父类()
    2. 本质:子类原型对象等于是实例化父类,因为父类实例化之后另外开辟空间,就不会影响原来父类原型对象
    3. 将子类的 constructor 从新指向子类的构造函数

    3. 类的本质

    ## 3. ES5 中的新增方法

    3.2 数组方法
    array.forEach(function(currentValue, index, arr))

    array.filter(function(currentValue, index, arr))
    filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素,主要用于筛选数组 注意它直接返回一个新数组
    array.some(function(currentValue, index, arr))
    1. some() 方法用于检测数组中的元素是否满足指定条件. 通俗点 查找数组中是否有满足条件的元素
    2. 注意它返回值是布尔值, 如果查找到这个元素, 就返回true , 如果查找不到就返回false.
    3. 如果找到第一个满足条件的元素,则终止循环. 不在继续查找.

    查询商品案例

    1. 把数据渲染到页面中 (forEach)
    2. 根据价格显示数据
    3. 根据商品名称显示数据

    界面如下:

    注:forEach与some区别

    **3.3 字符串方法**

    trim() 方法会从一个字符串的两端删除空白字符。
    语法:str.trim()
    trim() 方法并不影响原字符串本身,它返回的是一个新的字符串。

    **3.4 对象方法**

    1. Object.keys() 用于获取对象自身所有的属性

    2. Object.defineProperty() 定义对象中新属性或修改原有的属性。

    语法:Object.defineProperty(obj, prop, descriptor)
    - obj:必需。目标对象
    - prop:必需。需定义或修改的属性的名字
    - descriptor:必需。目标属性所拥有的特性
    Object.defineProperty() 第三个参数 descriptor 说明: 以对象形式 { } 书写

    - value: 设置属性的值 默认为undefined
    - writable: 值是否可以重写。true | false 默认为false
    - enumerable: 目标属性是否可以被枚举。true | false 默认为 false
    - configurable: 目标属性是否可以被删除或是否可以再次修改特性 true | false 默认为false

  • 相关阅读:
    解释 RESTful API,以及如何使用它构建 web 应用程序
    阿里云ESS弹性伸缩核心概念与基本使用
    YOLOv7改进:ConvNeXt(backbone改为CNeB)
    VScode运行SVN拉下来的项目
    [附源码]Python计算机毕业设计Django二次元信息分享平台的设计及实现
    flask——介绍、安装、快速使用、配置文件、路由系统、视图
    自动驾驶感知算法实战专栏总结:如何打造“高可靠、多冗余、可量化、数据驱动的感知系统”
    Linux——DNS(正向解析+反向解析+多域配置+主从配置)
    STM32F4x_中断配置
    java-BigDecimal 概述
  • 原文地址:https://blog.csdn.net/weixin_44995917/article/details/113888410