JavaScript高级程序设计 扩展–关于动态原型

yizhihongxing

关于JavaScript高级程序设计中的扩展——动态原型,我来详细解释一下。

动态原型

JavaScript 是一门基于原型继承的语言,原型链决定了对象如何继承属性和方法。原型是 JavaScript 对象中一个非常重要的概念,用于实现对象的继承,从而节省大量的代码。

动态原型模式是一种在同时使用构造函数和原型的情况下,可以向原型中添加方法的方法。如下所示:

function Person(name, age, job){
  this.name = name;
  this.age = age;
  this.job = job;
  if(typeof this.sayName != "function"){
    Person.prototype.sayName = function(){
      console.log(this.name);
    };
  }
}

上述代码中,我们创建了一个 Person 构造函数。在构造函数中使用服夹 if(typeof this.sayName != "function") 的代码,可以实现当使用 new 操作符创建对象的时候,仅在第一次调用构造函数的时候,才会执行 if 语句块内的代码。之后就不会再执行了,因为 sayName 属性已经被添加到了原型中,所以每个实例都可以调用它。

示例说明

示例一

现有一个 Student 函数构造器(class 类型),格式如下:

class Student { 
    constructor(name, age) { 
        this.name = name 
        this.age = age 
    }     
}

现在需要向 Student 的原型中动态地添加一个 sayHello 方法,输出 "Hello, I am name,age years old"。

class Student {
  constructor(name, age) {
    this.name = name;
    this.age = age;
    if (typeof this.sayHello != "function") {
      Student.prototype.sayHello = function () {
        console.log(`Hello, I am ${this.name}, ${this.age} years old.`)
      };
    }
  }
}

const s = new Student('Lucy', 18);
s.sayHello(); // 输出 "Hello, I am Lucy, 18 years old."

在 Student 构造函数中,添加了判断,“如果 typeof this.sayHello 不是一个函数,则给 Student 的原型添加一个属性。这样就可以确保每个实例都只会动态添加一次 sayHello 方法。在 s.sayHello() 的时候,输出 "Hello, I am Lucy, 18 years old."。

示例二

现有一个 Car 函数构造器,为汽车类,其中默认有车牌号和座位数。现在需要添加一个动态的方法 park,用于停放汽车时输出 "The car of plate number is parked in the yard"。

function Car(licensePlateNumber, seatNumber) { 
    this.licensePlateNumber = licensePlateNumber 
    this.seatNumber = seatNumber
    if (typeof this.park != "function") {
      Car.prototype.park = function () {
        console.log(`The car of ${this.licensePlateNumber} is parked in the yard.`);
      };
    }
}

在 Car 构造函数中,添加了判断,“如果 typeof this.park 不是一个函数,则给 Car 的原型添加一个 park() 方法。这样就可以确保每个实例都只会动态添加一次 park 方法。在 c.park() 的时候,输出 "The car of MN37C8 is parked in the yard."。

const c = new Car('MN37C8', '5');
c.park(); // 输出 "The car of MN37C8 is parked in the yard."

以上是关于动态原型的详细说明,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript高级程序设计 扩展–关于动态原型 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 详解JavaScript时间处理之几个月前或几个月后的指定日期

    详解JavaScript时间处理之几个月前或几个月后的指定日期 在 JavaScript 中,我们常常需要对日期进行计算和处理,在实际业务开发中经常会遇到需要计算几个月前或几个月后的日期的需求。本篇文章将详细介绍怎样在 JavaScript 中实现这个功能。 1. 思路分析 为了计算 X 个月前或 X 个月后的日期,我们可以先将指定日期转换为时间戳,然后进行…

    JavaScript 2023年5月27日
    00
  • 教你javascript如何获取指针的位置

    教你javascript如何获取指针的位置 什么是指针? 在计算机中,指针是一个变量,存储了一个内存地址,该地址指向一个数据单元。指针可以被用来直接访问和修改内存中的数据,因此它在程序中非常有用。 在JavaScript中,由于其具有自动内存管理机制,因此没有指针类型。但是,在某些情况下,我们需要获取鼠标指针在页面中的位置。 获取鼠标指针位置 在JavaSc…

    JavaScript 2023年6月11日
    00
  • spring boot(四)之thymeleaf使用详解

    下面我将详细讲解“spring boot(四)之thymeleaf使用详解”的完整攻略。 1. 什么是Thymeleaf Thymeleaf是一个现代的服务器端Java模板引擎,旨在提供HTML效果的自然模板创建。它旨在生产出可以用浏览器查看的HTML,并且是非常适合web开发人员的,因为Thymeleaf非常适合处理HTML,最小化代码数量并让设计师或开发…

    JavaScript 2023年6月11日
    00
  • Bootstrap table的使用方法

    以下是关于Bootstrap table的使用方法的完整攻略。 Bootstrap table是什么? Bootstrap table是一个基于Bootstrap开发的强大的表格插件,提供了丰富的功能和定制选项,使得开发人员可以快速创建高度定制化的表格。 如何引入Bootstrap table? 在使用Bootstrap table之前,我们需要先引入Boo…

    JavaScript 2023年6月11日
    00
  • javascript中floor使用方法总结

    下面来详细讲解一下“javascript中floor使用方法总结”。 什么是floor函数? floor是Javascript内置的一个Math对象里的函数,可以得到一个小数的整数部分。 floor怎么使用? floor函数的使用很简单,可以直接用Math对象调用: Math.floor(3.14); // 3 上面的代码,调用了Math对象的floor方法…

    JavaScript 2023年5月28日
    00
  • js实现点击添加一个input节点

    实现点击添加一个input节点,可以通过原生JS或者jQuery来实现。下面分别介绍两种方式的实现步骤。 原生JS实现方式 首先需要在HTML中定义一个按钮和一个容器,当点击按钮时,会在容器中添加一个input节点。 <button id="addInput">添加Input</button> <div id…

    JavaScript 2023年6月10日
    00
  • ES6中的rest参数与扩展运算符详解

    ES6中的rest参数与扩展运算符详解 在ES6中,新增了rest参数和扩展运算符这两个语法特性,它们在函数的参数传递过程中非常有用。本文将详细讲解它们的用法和示例。 Rest参数 在ES6中,可以使用rest参数来表示不定数量的参数。具体来说,rest参数是一个数组,它包含了所有传入函数中的不定参数,我们可以使用类似于普通数组的方法来操作它。 functi…

    JavaScript 2023年6月10日
    00
  • js浏览器html5表单验证

    下面是“JS浏览器HTML5表单验证”的完整攻略。 1. 前言 HTML5表单验证是一个Web开发中非常重要的组成部分,而这些验证可以使用HTML5的属性来完成。但是这些验证可能无法满足开发人员的特定需求,所以我们需要使用JavaScript来完成这个工作。在这里,我们将学习如何使用javascript实现HTML5表单验证。 2. 表单中常用的验证 HTM…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部