javascript object oriented 面向对象编程初步

JavaScript 面向对象编程初步

前言

JavaScript 是一种面向对象的编程语言,面向对象编程(Object Oriented Programming)是一种编程范式,它将数据抽象为对象,对象之间相互关联,通过这种方式组织代码和数据,使得代码更加易读易懂、可维护性更高。

在 JavaScript 中,我们可以使用函数、对象和原型等方式来实现面向对象编程。

构造函数

构造函数(Constructor)是 JavaScript 中用于创建对象的函数。我们通过构造函数产生一个新的对象,这个对象被称为实例(Instance)。

例如,我们可以通过以下方式定义一个名为 Person 的构造函数:

function Person(name, age) {
  this.name = name;
  this.age = age;
}

在上面的代码中,我们定义了一个构造函数 Person,它有两个参数 nameage,并且在函数体中使用了 this 关键字给实例添加了两个属性。可以看出,通过构造函数我们可以轻松地创建多个对象,每个对象都拥有相同的属性和方法。

例如,我们可以使用以下方式创建两个不同的 Person 实例:

const person1 = new Person('张三', 20);
const person2 = new Person('李四', 30);

在上面的代码中,我们使用 new 关键字创建了两个 Person 实例 person1person2,它们都拥有 nameage 两个属性。

属性和方法

在 JavaScript 中,构造函数除了可以给实例添加属性之外,还可以给实例添加方法。可以通过在构造函数的原型上添加方法来实现。

例如,我们可以在 Person 构造函数的原型上添加一个方法 sayHi

Person.prototype.sayHi = function() {
  console.log(`Hi, my name is ${this.name}, I'm ${this.age} years old.`);
}

在上面的代码中,我们使用了 prototype 属性给 Person 构造函数添加了一个方法 sayHisayHi 方法用来输出当前实例的姓名和年龄。

现在我们可以通过以下方式调用 sayHi 方法:

person1.sayHi(); // Hi, my name is 张三, I'm 20 years old.
person2.sayHi(); // Hi, my name is 李四, I'm 30 years old.

上面的代码中,我们分别调用了 person1person2sayHi 方法,输出了它们的姓名和年龄。

继承

在面向对象编程中,继承(Inheritance)是一种非常重要的机制。继承允许我们通过一个已知的对象去创建一个新的对象,并将新对象的属性和方法继承自已知对象。这种方式可以节省很多代码。

在 JavaScript 中,我们可以通过使用原型(Prototype)来实现继承。

例如,我们可以定义一个名为 Student 的构造函数,它继承自 Person 构造函数:

function Student(name, age, grade) {
  Person.call(this, name, age);
  this.grade = grade;
}

在上面的代码中,我们定义了一个名为 Student 的构造函数,它有三个参数 nameagegrade。它调用了父类 Personcall 方法,将 this 关键字绑定到当前实例,并向父类 Person 传递 nameage 两个参数。接着,它给实例添加了一个名为 grade 的属性。

现在我们可以通过以下方式创建一个 Student 实例:

const student = new Student('张三', 20, '一年级');
console.log(student.name); // 张三
console.log(student.grade); // 一年级

student.sayHi(); // Hi, my name is 张三, I'm 20 years old.

在上面的代码中,我们创建了一个 Student 实例 student,它继承了 Person 的属性和方法,并且额外添加了一个 grade 属性。可以看出,student 实例不仅具有 Person 实例的属性和方法,还具有自己的属性。

示例说明

示例一

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

Animal.prototype.sayHi = function() {
  console.log(`Hi, I'm ${this.name}.`);
}

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

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

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

const dog = new Dog('小花');
dog.sayHi(); // Hi, I'm 小花.
dog.bark(); // woof woof!

在上面的代码中,我们定义了一个 Animal 构造函数和一个 Dog 构造函数。Animal 构造函数用来创建动物实例,Dog 构造函数通过继承 Animal 构造函数来创建狗实例。我们定义了一个 bark 方法用来输出狗的叫声。最后,我们创建了一个 Dog 实例 dog,并调用了它的 sayHibark 方法。

示例二

class Shape {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }

  sayHi() {
    console.log('Hi, I am a shape.');
  }
}

class Circle extends Shape {
  constructor(x, y, r) {
    super(x, y);
    this.r = r;
  }

  area() {
    return Math.PI * this.r * this.r;
  }
}

const circle = new Circle(0, 0, 10);
circle.sayHi(); // Hi, I am a shape.
console.log(circle.area()); // 314.1592653589793

在上面的代码中,我们定义了一个基类 Shape 和一个派生类 CircleShape 类有 xy 两个属性,还有一个 sayHi 方法,用来输出形状的类型。Circle 类继承自 Shape 类,添加了一个 r 属性和一个 area 方法,用来计算圆的面积。最后,我们创建了一个 Circle 实例 circle,并调用了它的 sayHiarea 方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript object oriented 面向对象编程初步 - Python技术站

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

相关文章

  • 教你如何使用node.js制作代理服务器

    使用Node.js制作代理服务器 什么是代理服务器? 代理服务器是一种位于用户和互联网之间的服务器,它充当了浏览器和真实服务器之间的中间人。在正常情况下,浏览器直接向真实服务器发送请求,获取响应。但是当使用代理服务器时,浏览器将请求发送到代理服务器,代理服务器再将请求发送到真实服务器,并将响应返回给浏览器。代理服务器可以隐藏用户的真实IP地址,加快数据传输速…

    node js 2023年6月8日
    00
  • vue中v-if和v-show使用区别源码分析

    这里为你详细讲解“vue中v-if和v-show使用区别源码分析”的完整攻略。 1. v-if 和 v-show 的使用区别 在Vue中,v-if和v-show的主要区别在于初始渲染时是否会被渲染出来。 v-if:如果表达式的值为false,则元素根本不会被渲染到页面中,只有在表达式的值为true时,元素才会被渲染到页面中。 v-show:无论表达式的值是t…

    node js 2023年6月8日
    00
  • 简单了解JavaScript异步

    简单了解JavaScript异步 什么是JavaScript异步? JavaScript是一门单线程语言,也就是说它同时只可以执行一段代码,而异步编程是针对这种单线程限制的解决方案。简单来说,异步编程就是在主线程未被阻塞的情况下执行其他任务。 举个例子,如果你需要向服务器发送一个请求,但是你不想等待服务器返回数据之后才能继续执行代码,这时就需要异步编程来处理…

    node js 2023年6月8日
    00
  • 13道关于JavaScript正则表达式的面试题

    关于JavaScript正则表达式的面试题是前端开发者面试过程中经常会遇到的问题。以下是针对这些问题的完整攻略,希望对您有所帮助。 问题1:什么是正则表达式? 正则表达式是一种描述匹配模式的字符串。它们通常用于搜索和替换文本。 问题2:怎样创建正则表达式? JavaScript中可以通过两种方式创建正则表达式: 使用RegExp对象:可以通过new关键字实例…

    node js 2023年6月8日
    00
  • Nodejs 模块化实现示例深入探究

    首先需要明确一下什么是 Node.js 的模块化。 在 Node.js 中,每个文件就是一个模块,模块是独立的,可以被其他模块引用和调用。同时,Node.js 还支持将多个模块组成一个完整的功能,这就是模块化。 Node.js 中常用的模块化方案有两种,分别是 CommonJS 和 ES6 模块化。其中,CommonJS 是 Node.js 原生支持的模块化…

    node js 2023年6月8日
    00
  • 微信小程序中使用vant组件库的超详细图文教程

    下面是使用vant组件库的微信小程序完整攻略: 1. 准备工作 创建一个新的微信小程序项目 在项目根目录下安装vant-weapp组件库 npm install vant-weapp -S –production 将vant组件库的dist目录复制到项目中,并在app.json中引入组件 { "usingComponents": { &…

    node js 2023年6月8日
    00
  • 浅析Nodejs npm常用命令

    我将为您详细讲解“浅析Nodejs npm常用命令”的完整攻略。 一、 什么是npm? npm是Node.js的包管理工具,它能够帮助我们安装、管理依赖,以及发布我们自己的包。 二、npm常用命令 1. npm init npm init命令可以让我们创建一个新的package.json文件,这个文件是用来描述我们的项目的,可以在这个文件中设置项目的基本信息…

    node js 2023年6月8日
    00
  • Node.JS获取GET,POST数据之queryString模块使用方法详解

    下面是详细讲解“Node.JS获取GET,POST数据之queryString模块使用方法详解”的完整攻略。 什么是queryString模块? Node.js中的queryString模块可以用于解析和格式化URL查询字符串(query string)。它是一个内置模块,因此无需单独安装。queryString模块主要包含两个方法: queryString…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部