Javascript使用function创建类的两种方法(推荐)

使用 function 创建类的方法,也被称作“构造函数模式”,是JavaScript中一种常用的定义对象的方法。

方法1:直接创建

我们可以使用function语法,按照类定义对象的基本思路,创建一个构造函数(类)。在构造函数(类)内部使用this关键字声明该类的实例属性和方法。

下面的代码演示了这种方式创建类Person,并定义了实例属性nameage以及实例方法sayName

function Person(name, age) {
    this.name = name; // 类的实例属性
    this.age = age; // 类的实例属性
    this.sayName = function () { // 类的实例方法
        console.log(`My name is ${this.name}`);
    }
}

我们需要使用构造函数来实例化该类并创建类的对象。

const person = new Person('Tom', 20);
person.sayName(); // 输出:My name is Tom

方法2:使用原型,更加优雅

很显然,上述声明方式虽然可以正确地创建类,但从语义上来说,却不是将类的属性和方法一一抽象分离的结果,而是将实例属性和方法都绑定在了构造函数内部。这显然没有遵循高内聚、低耦合的设计原则。

因此,更优雅、推荐的方式是:在构造函数的prototype原型上定义实例方法和属性。

下面的代码片段演示了这种方式创建类Person。在构造函数内部,仅去声明实例属性nameage

function Person(name, age) {
    this.name = name; // 类的实例属性
    this.age = age; // 类的实例属性
}

在构造函数的prototype上定义类的实例方法sayName

Person.prototype.sayName = function () { // 类的实例方法
    console.log(`My name is ${this.name}`);
}

我们也需要使用构造函数来实例化该类并创建类的对象。

const person = new Person('Tom', 20);
person.sayName(); // 输出:My name is Tom

第二种方式更加优雅,因为在构造函数中不会出现实例方法、实例属性的定义。我们在使用时可以更好的区分类和实例,使代码的可维护性更好。

示例1:Student类

下面的示例代码中,我们使用方法2定义了一个Student类。该类有构造函数实例属性nameage,还有introduce方法和使用static关键字定义的静态属性className

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

// 类的实例方法
Student.prototype.introduce = function () {
    console.log(`My name is ${this.name}, I'm ${this.age} years old, in the class ${Student.className}`);
}

// 类的静态属性
Student.className = 'math class';

const student1 = new Student('Tom', 18);
student1.introduce(); // 输出:My name is Tom, I'm 18 years old, in the class math class

示例2:Rectangle类

下面的示例代码中,我们使用方法1定义了一个Rectangle类。该类有构造函数实例属性widthheight以及实例方法areashow

function Rectangle(width, height) {
    this.width = width;
    this.height = height;
    this.area = function () { // 实例方法
        return this.width * this.height;
    }
    this.show = function () { // 实例方法
        console.log(`This is a rectangle and the width is ${this.width}, the height is ${this.height}, the area is ${this.area()}`);
    }
}

const rectangle1 = new Rectangle(5, 6);
rectangle1.show(); // 输出:This is a rectangle and the width is 5, the height is 6, the area is 30

这种方法虽然在语义上不是非常优雅,但在书写简单类时有时也是非常方便的。

总结

面向对象编程是一种非常常见的编程思路。在JavaScript中使用function创建类,是一种常用的面向对象编程方法。我们可以通过两种方式,使用构造函数定义实例属性和实例方法,然后用prototype声明实例方法,从而构造面向对象编程的JavaScript应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript使用function创建类的两种方法(推荐) - Python技术站

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

相关文章

  • JavaScript中对象property的读取和写入方法介绍

    下面我就来为你详细讲解“JavaScript中对象property的读取和写入方法介绍”。 什么是对象property 在JavaScript中,对象是一种基本类型,它由key-value键值对组成。对象的属性可以是任意的JavaScript值,例如数字、布尔值、字符串、函数、甚至可以是另一个对象。在JavaScript中,我们使用点(.)或方括号([])访…

    JavaScript 2023年5月27日
    00
  • 放弃 console.log 吧!用 Debugger 你能读懂各种源码

    很多同学不知道为什么要用 debugger 来调试,console.log 不行么? 还有,会用 debugger 了,还是有很多代码看不懂,如何调试复杂源码呢? 这篇文章就来讲一下为什么要用这些调试工具: console.log vs Debugger 相信绝大多数同学使用 console.log 调试的,把想看的变量值打印在控制台。 这样能满足需求,但是…

    JavaScript 2023年4月17日
    00
  • JS与C#编码解码

    JS和C#都内置了编码和解码的功能,并提供了多种编码和解码方式。下面我将具体讲解JS和C#中的编码和解码,并提供两个示例来演示编码和解码的过程。 JS中的编码和解码 在JS中,我们通常使用encodeURI和encodeURIComponent来对URL进行编码,使用decodeURI和decodeURIComponent对URL进行解码。下面是具体的使用方…

    JavaScript 2023年5月20日
    00
  • JavaScript Math.floor方法(对数值向下取整)

    JavaScript Math.floor方法 Math.floor() 方法会返回小于等于所传参数的最大整数。 语法 Math.floor(x) 参数 x:必需。一个数值,将被下舍入为整数。 返回值 返回小于等于 x 的最大整数。 示例1:向下取整 var a = Math.floor(4.3); // 4 var b = Math.floor(9.999…

    JavaScript 2023年5月28日
    00
  • jquery及js实现动态加载js文件的方法

    首先,为了动态加载 JavaScript 文件,我们需要使用 JavaScript/jQuery 中的 createElement 和 appendChild 方法。下面是详细步骤: 使用原生JS动态加载外部JS文件 通过 createElement 创建一个 script 标签: javascript var script = document.creat…

    JavaScript 2023年5月27日
    00
  • (转载)JavaScript中匿名函数,函数直接量和闭包

    标题:JavaScript中匿名函数、函数直接量和闭包的完整攻略 1. 匿名函数 匿名函数是指没有名字的函数。在JavaScript中,可以通过以下两种方式来定义匿名函数: 1.1 函数表达式 函数表达式是指将一个匿名函数赋值给一个变量,变量名就成了这个匿名函数的名字。示例代码如下: var add = function(x, y) { return x +…

    JavaScript 2023年5月27日
    00
  • 初学JavaScript第一章

    初学JavaScript第一章:入门 在学习JavaScript时,第一章通常会介绍一些与JavaScript相关的基础知识。本章节将讲解如下几个方面: JavaScript简介 JavaScript开发工具 将JavaScript代码包含在HTML中的方式 控制台输出 JavaScript简介 JavaScript是一种脚本语言,通常用于增强网站的交互性。…

    JavaScript 2023年5月27日
    00
  • JS前端开发之exec()和match()的对比使用

    JS前端开发之exec()和match()的对比使用 简介 在JavaScript中,字符串对象自带了match()和exec()方法用于字符串的正则匹配。两者的区别在于返回值不同。 match()方法 match()方法是String对象的一个方法。该方法接收一个正则表达式作为参数,并返回一个匹配结果数组,如果未匹配到则返回null。如果不给该方法传递参数…

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