JavaScript的模块化:封装(闭包),继承(原型) 介绍

yizhihongxing

JavaScript的模块化是一种将代码按照一定方式进行组织的方法。在JavaScript中,我们可以使用封装和继承实现模块化。

封装

封装是一种通过闭包实现的模块化方式,可以将一些数据和函数放在一个私有的作用域中,从而避免污染全局变量,同时将一些方法暴露出来,使之成为共有的API。

示例1

下面是一个简单的封装示例,通过IIFE(立即调用的函数表达式)创建一个私有的作用域,在其中定义一个私有变量和一个共有方法,将方法exports到全局作用域。

(function(){
  var count = 0;

  function increment() {
    count++;
  }

  function getCount() {
    return count;
  }

  window.counter = {
    increment: increment,
    getCount: getCount
  };
})();

在上述示例中,我们创建了一个计数器,将count和increment方法定义在了IIFE的作用域中,getCount方法被暴露到全局作用域中,可以供其他部分调用。

示例2

下面是另一个封装示例,使用闭包和立即调用的函数表达式(IIFE),创建了一个返回随机数的方法。

var randomNum = (function() {
  var MAX = 100;
  var MIN = 0;

  function random() {
    return Math.floor(Math.random() * (MAX - MIN + 1)) + MIN;
  }

  return random;
})();

console.log(randomNum());

在这个示例中,我们定义了MAX和MIN作为私有变量,创建了一个随机数生成器的函数random,并将这个函数暴露给全局作用域,可以随时调用返回一个随机数。

继承

继承是一种通过原型实现的模块化方式,可以通过原型链将子类和父类连接起来,在子类中增加或重写一些方法。

示例1

下面是一个简单的继承示例,使用原型方法来实现继承,创建一个动物类和狗类,狗类继承自动物类。

function Animal(name) {
  this.name = name;
}

Animal.prototype.sayName = function() {
  console.log('My name is ' + this.name);
}

function Dog(name) {
  Animal.call(this, name);
}

Dog.prototype = Object.create(Animal.prototype);

Dog.prototype.bark = function() {
  console.log('Woof!');
}

var puppy = new Dog('Buddy');
puppy.sayName();
puppy.bark();

在这个示例中,我们创建了一个动物类,包含一个sayName方法,再创建一个狗类,调用Animal构造函数,使用Object.create方法来连接狗类和动物类,重写了一个bark方法。

示例2

下面是另一个继承示例,使用class和extends来实现继承,改写刚才的狗类。

class Animal {
  constructor(name) {
    this.name = name;
  }

  sayName() {
    console.log('My name is ' + this.name);
  }
}

class Dog extends Animal {
  constructor(name) {
    super(name);
  }

  bark() {
    console.log('Woof!');
  }
}

let puppy = new Dog('Buddy');
puppy.sayName();
puppy.bark();

在这个示例中,我们使用了ES6中的class和extends关键字,简化了代码,但实质上仍然是原型继承。我们定义了一个Animal类,在其中包含一个构造函数和一个方法,再定义一个狗类继承Animal类,并在狗类中重写了一个方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript的模块化:封装(闭包),继承(原型) 介绍 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JavaScript 自定义对象方法汇总

    JavaScript 自定义对象方法汇总 在 JavaScript 中,我们可以通过自定义对象方法来为对象添加各种功能和行为。本文将详细讲解如何自定义对象方法。 一、创建对象 在 JavaScript 中创建对象可以使用构造函数和字面量两种方式。 构造函数方式创建对象 使用构造函数可以创建一个类,再通过实例化对象来使用这个类中的自定义方法。示例代码如下: /…

    JavaScript 2023年5月27日
    00
  • JavaScript Event事件学习第一章 Event介绍

    JavaScript Event事件学习第一章 Event介绍 什么是Event? Event(事件)是指在HTML文档中发生的交互性质的动作,例如单击某个元素、按下键盘上的某个键以及页面的滚动等。在JavaScript中,Event被认为是一种用户活动,它可以被捕获,处理和响应。 Event包含哪些信息? 当Event发生时,会携带一个Event对象,其中…

    JavaScript 2023年6月11日
    00
  • 使用AutoJs实现微信抢红包的代码

    AutoJs是一款安卓平台上的自动化脚本编写工具,它不仅支持自动化操作手机应用,还支持使用JavaScript进行脚本编写。本文将详细讲解如何使用AutoJs来实现微信抢红包的代码。 第一步:准备工作 下载AutoJs APP,并安装到手机上。 打开AutoJs,在主界面点击左下角的“+”号按钮,创建一个新项目,并将其命名为“微信抢红包”。 在新项目的界面中…

    JavaScript 2023年6月11日
    00
  • javascript实现匀速动画效果

    下面是“javascript实现匀速动画效果”的完整攻略。 什么是匀速动画 匀速动画就是指在移动过程中速度保持不变的动画。比如,一个物体从 A 点移动到 B 点,如果速度一直保持不变,则称为匀速动画。这种动画效果在一些场合会比较实用,比如模拟车辆行驶等。 实现原理 要实现匀速动画,我们需要计算出物体移动时每个单位时间的位移量。假设我们要移动的距离是 $dis…

    JavaScript 2023年6月10日
    00
  • js比较日期大小的方法

    需要比较日期大小的场景在JavaScript开发中非常常见,下面给出几种不同的比较日期大小的方法,供大家参考。 通过日期对象的valueOf()方法比较 JavaScript中日期对象有一个valueOf()方法,可以返回从1970年1月1日00:00:00起到该日期对象所代表的时间的毫秒数,因此可以通过比较两个日期对象的valueOf()方法返回值大小来判…

    JavaScript 2023年5月27日
    00
  • js字符编码函数区别分析

    JS字符编码函数区别分析 在 JavaScript 中,有几个字符编码相关的函数。本篇文章将详细分析它们的区别。 escape() escape() 函数将非 ASCII 字符和一些 ASCII 字符(如空格、句点、斜杠等)转换为一种特殊的编码格式,比如 %20 代表空格。常用于将一些特殊字符转换为 URL 字符串。 const str = ‘Hello, …

    JavaScript 2023年5月19日
    00
  • vue中的attribute和property的具体使用及区别

    Vue中Attribute和Property的使用及区别 在Vue中,我们经常使用Attribute和Property来设置或获取元素的属性值,这两者是有区别的。在本文中,我们将会详细讲解它们的用法及区别。 Attribute和Property的区别 首先,我们需要明确Attribute和Property的区别。简单来说,Attribute是在HTML中定义…

    JavaScript 2023年6月10日
    00
  • React Native中NavigatorIOS组件的简单使用详解

    下面我来详细讲解“React Native中NavigatorIOS组件的简单使用详解”的完整攻略。 什么是NavigatorIOS组件 NavigatorIOS是React Native中的一个内置组件,它提供了一个iOS导航栏,使我们的应用程序在iOS设备上更加便捷,用户可以轻松地在应用程序的页面之间进行导航操作。 如何在React Native中使用N…

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