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

yizhihongxing

使用 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日

相关文章

  • python获取引用对象的个数方式

    Python 中获取引用对象的个数有多种方式,下面我将详细介绍这些方法,并提供示例方便理解。 使用sys.getrefcount方法 sys.getrefcount 是 Python 内置的一个方法,它可以用来获取一个对象的引用计数。 该方法的语法如下: import sys refCount = sys.getrefcount(object) 其中 obj…

    JavaScript 2023年6月11日
    00
  • 犀利的js 函数集合

    犀利的JS函数集合 介绍 犀利的JS函数集合是一些实用的JavaScript函数合集,可以帮助开发人员更高效地编写JavaScript代码。 安装 本函数集合可以直接在浏览器中使用,在HTML中引入js文件即可开始使用。 <script src="sharpjs.js"></script> 使用 类型判断: sha…

    JavaScript 2023年5月27日
    00
  • JS中‘hello’与new String(‘hello’)引出的问题详解

    当我们在JS中定义一个字符串时,我们可以使用字符串字面量 (string literal) 或者使用 String 对象 (String object)。 例如: let strLiteral = ‘hello’; let strObject = new String(‘hello’); 从上面的代码中可以看出,两种方式都可以定义一个字符串并将其赋值给变量。…

    JavaScript 2023年5月28日
    00
  • JavaScript 判断iPhone X Series机型的方法

    下面是详细讲解”JavaScript 判断iPhone X Series机型的方法” 的完整攻略。 前言 首先,我们需要了解一下 iPhone X Series 机型的特点,它们比一般的 iPhone 机型拥有更高的设备屏幕分辨率,并且它们的设备宽高比(device aspect ratio)都是 1125:2436。 判断方法 为了判断一个设备是否为 iP…

    JavaScript 2023年6月11日
    00
  • JavaScript实现对下拉列表值进行排序的方法

    当需要对下拉列表的值进行排序时,我们可以通过JavaScript的排序方法来实现。下面是一些实现方法: 方法一:使用数组排序 首先,我们需要获取下拉列表的所有选项,并将其存储在一个数组中。然后,使用JavaScript中的sort()函数对数组进行排序。最后,将排序后的值重新设置回下拉列表。 下面是代码示例: // 获取下拉列表对象 var dropdown…

    JavaScript 2023年6月11日
    00
  • JS简单生成随机数(随机密码)的方法

    生成随机数或随机密码是前端开发中比较常见的需求。在JavaScript中,我们可以通过Math对象来生成随机数。下面是完整的攻略: 1. 生成随机整数 生成随机整数的代码如下: // 生成随机整数 function getRandomInt(min, max) { min = Math.ceil(min); max = Math.floor(max); re…

    JavaScript 2023年5月28日
    00
  • 如何在 JavaScript 中更好地利用数组

    当涉及到 JavaScript 中的数组时,有一些技巧可以帮助我们更好地使用它们。以下是一些利用数组的技巧,包括代码示例。 数组的创建和初始化 我们可以使用数组字面量创建一个数组,如下所示: const myArray = [1, 2, 3]; 我们还可以使用构造函数 Array() 来创建一个数组。 const myArray = new Array(1,…

    JavaScript 2023年5月27日
    00
  • JS 中LocalStorage和SessionStorage的使用

    下面是 JS 中LocalStorage和SessionStorage的使用攻略: LocalStorage 和 SessionStorage 是什么? LocalStorage 和 SessionStorage 都是 HTML5 引入的一种存储 key-value 数据的机制,在浏览器端存储数据。两者有以下不同: LocalStorage 存储的数据没有过…

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