Javascript类详解

一、基本概念

Javascript是一种基于对象和事件驱动的脚本语言,最初设计用于浏览器端的脚本语言,用于动态增加交互性和用户体验。Javascript类是Javascript中进行面向对象编程的基础,它是一种抽象的数据类型,它对外界提供各种各样的数据和方法,并具有封装、继承和多态三大特征。

在Javascript类中,重要的概念有实例、属性和方法。实例是Javascript类派生出来的对象,属性是实例中存储的数据值,方法是实例中执行的函数,它们可以在Javascript类中定义。

Javascript类的定义可以通过构造函数、工厂函数和类声明三种方式实现。其中构造函数是一种传统的定义方式,工厂函数则是一种简单实用的方式,而类声明则是ES6中新增的一种定义方式。

1.构造函数的定义方式

function Person(name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.sayHello = function() {
  console.log("Hello, my name is " + this.name);
}
var p = new Person("Tom", 20);
p.sayHello();

上述代码中,我们定义了一个Person类,它有两个属性name和age,和一个方法sayHello。使用关键字new创建一个新的Person实例,并调用sayHello方法。

2.工厂函数的定义方式

function createPerson(name, age) {
  var person = {
    name: name,
    age: age,
    sayHello: function() {
      console.log("Hello, my name is " + this.name);
    }
  };
  return person;
}
var p = createPerson("Tom", 20);
p.sayHello();

上述代码中,我们定义了一个createPerson函数,它返回一个新的Person实例对象,这个对象有两个属性name和age,和一个方法sayHello。调用createPerson函数创建新的实例对象,并调用sayHello方法。

3.类声明的定义方式

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  sayHello() {
    console.log("Hello, my name is " + this.name);
  }
}
let p = new Person("Tom", 20);
p.sayHello();

上述代码中,我们使用ES6的新特性class声明了一个Person类,它有两个属性name和age,和一个方法sayHello。使用关键字new创建一个新的Person实例,并调用sayHello方法。

二、继承和多态

1.继承

继承是面向对象编程中的重要特性,它可以让子类拥有父类中的属性和方法,并可以添加自己的属性和方法。在Javascript类中,可以通过prototype链来实现继承。

function Person(name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.sayHello = function() {
  console.log("Hello, my name is " + this.name);
}

function Student(name, age, school) {
  Person.call(this, name, age); //调用父类构造函数继承属性
  this.school = school;
}
Student.prototype = Object.create(Person.prototype); //通过prototype链继承方法
Student.prototype.constructor = Student; //修正构造函数指向
Student.prototype.sayHello = function() { //重写父类方法
  console.log("Hello, my name is " + this.name + ", I study in " + this.school);
}

var s = new Student("Lily", 18, "MIT");
s.sayHello();

上述代码中,我们定义了一个Person类和一个Student类,使用Person.call方法继承Person类的属性,使用Object.create方法创建了一个继承自Person类原型的Student类,并重写了Person类中的sayHello方法。使用关键字new创建一个新的Student实例,并调用sayHello方法。

2.多态

多态是面向对象编程中的另一种重要特性,它可以让不同的对象对同一消息作出相应,从而实现程序的动态性和灵活性。在Javascript类中,可以通过重写父类方法来实现多态。

function Person(name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.sayHello = function() {
  console.log("Hello, my name is " + this.name);
}

function Student(name, age, school) {
  Person.call(this, name, age); //调用父类构造函数继承属性
  this.school = school;
}
Student.prototype = Object.create(Person.prototype); //通过prototype链继承方法
Student.prototype.constructor = Student; //修正构造函数指向
Student.prototype.sayHello = function() { //重写父类方法
  console.log("Hello, my name is " + this.name + ", I study in " + this.school);
}

function sayHello(p) { //多态通用方法
  if (typeof p.sayHello === "function") {
    p.sayHello();
  }
}

var p = new Person("Tom", 20);
var s = new Student("Lily", 18, "MIT");
sayHello(p);
sayHello(s);

上述代码中,我们定义了一个sayHello方法,它会根据对象的不同调用相应的sayHello方法。使用关键字new创建新的Person和Student实例,并调用sayHello方法。

三、ES6新特性

ES6是Javascript的重要更新,它新增了一些语言特性,如箭头函数、模板字面量、解构赋值、for…of循环、let和const关键字、类和模块等。在Javascript类中,ES6的类和模块是最重要的新特性。

1.类的定义

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  sayHello() {
    console.log("Hello, my name is " + this.name);
  }
}

let p = new Person("Tom", 20);
p.sayHello();

ES6中新增的关键字class可以用来定义一个类,它更加简洁明了,让Javascript类的定义更加贴近传统面向对象编程语言的风格。

2.模块的定义

//math.js
export function square(x) {
  return x * x;
}
export function cube(x) {
  return x * x * x;
}

//main.js
import { square, cube } from "./math.js";
console.log(square(3)); //9
console.log(cube(3)); //27

ES6中新增的关键字export和import可以用来定义和引用模块,它更加简洁易懂,让Javascript的模块化编程更加方便和实用。

原创文章,作者:ULRW,如若转载,请注明出处:https://www.506064.com/n/136360.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ULRW的头像ULRW
上一篇 2024-10-04 00:16
下一篇 2024-10-04 00:16

相关推荐

  • 使用JavaScript日期函数掌握时间

    在本文中,我们将深入探讨JavaScript日期函数,并且从多个视角介绍其应用方法和重要性。 一、日期的基本表示与获取 在JavaScript中,使用Date对象来表示日期和时间,…

    编程 2025-04-28
  • JavaScript中使用new Date转换为YYYYMMDD格式

    在JavaScript中,我们通常会使用Date对象来表示日期和时间。当我们需要在网站上显示日期时,很多情况下需要将Date对象转换成YYYYMMDD格式的字符串。下面我们来详细了…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • JavaScript中修改style属性的方法和技巧

    一、基本概念和方法 style属性是JavaScript中一个非常重要的属性,它可以用来控制HTML元素的样式,包括颜色、大小、字体等等。这里介绍一些常用的方法: 1、通过Java…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • C语言贪吃蛇详解

    一、数据结构和算法 C语言贪吃蛇主要运用了以下数据结构和算法: 1. 链表 typedef struct body { int x; int y; struct body *nex…

    编程 2025-04-25

发表回复

登录后才能评论