JS创建对象几种不同方法详解

JS创建对象几种不同方法详解

JavaScript 中创建对象的方法有多种,每种方法都有其优缺点。以下是对这几种方法的详细讲解。

1. 使用对象字面量创建对象

使用对象字面量是最常所见的创建对象的方式之一,也是最简单的方式。对象字面量是一组用花括号包围的键值对,每个键值对表示对象的一个属性和相应的值。

let person = {
  name: 'John Smith',
  age: 25,
  sayHello: function() {
    console.log('Hello!');
  }
};

上述代码中,我们创建了一个名为 person 的对象,它有两个属性 nameage,分别被赋值为 'John Smith'25。它还有一个 sayHello 方法,该方法用于在控制台中打印一条简单的问候语。

优点:

  • 简单易懂
  • 不需要使用额外的构造函数或原型

缺点:

  • 无法实现复用性

2. 使用构造函数创建对象

JS 中的构造函数和其他编程语言中的类很相似,它们被用来创建对象。要创建一个构造函数,只需使用一个函数,并大写函数名称以示区别。

function Person(name, age) {
  this.name = name;
  this.age = age;
  this.sayHello = function() {
    console.log('Hello!');
  }
}

let person = new Person('John Smith', 25);

在上述代码中,我们创建了一个名为 Person 的构造函数。调用 Person 时,我们传递了两个参数 nameage。函数体内使用 this 关键字引用了新对象,并给它设置了属性。最后,我们使用 new 关键字创建了一个新的 Person 对象,将其赋值给 person 变量。

优点:

  • 可以创建多个相似的对象
  • 可以使用 new 关键字来创建对象

缺点:

  • 每个对象都有自己的方法,造成浪费

3. 使用 Object.create() 方法创建对象

Object.create() 方法是用来创建一个新对象的,并将其原型设置为传递给它的对象。

const person = {
  name: 'John Smith',
  age: 25,
  sayHello: function() {
    console.log('Hello!');
  }
};

const newPerson = Object.create(person);

console.log(newPerson.name);
console.log(newPerson.age);
newPerson.sayHello();

在上述代码中,我们首先创建了一个名为 person 的对象,它有两个属性 nameage,以及一个 sayHello 方法。我们使用 Object.create() 方法和 person 对象作为参数创建了一个新的对象 newPerson,因此 newPerson 对象拥有 person 对象的所有属性和方法。

优点:

  • 可以创建共享属性的对象
  • 可以基于现有对象创建新对象

缺点:

  • 在原型上定义的属性和方法会被所有子对象共享,可能会影响其他对象

4. 使用 ES6 的 class 关键字创建对象

ES6 引入了类的概念,并提供了使用 class 关键字定义类的语法。类是一个模板,可以用来创建对象。

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

  sayHello() {
    console.log('Hello!');
  }
}

let person = new Person('John Smith', 25);

console.log(person.name);
console.log(person.age);
person.sayHello();

在上述代码中,我们定义了 Person 类,该类具有 nameage 两个属性,以及一个 sayHello 方法。我们使用 new 关键字创建了一个新的 Person 对象。

优点:

  • 更加清晰易懂
  • 使用 class 可以更好的使用继承等概念

缺点:

  • 只能在 ES6 或更高版本的环境中使用
  • 语法上相对比较繁琐

示例说明:

为了进一步说明这几种方法的使用,在以下示例中我们将用它们来创建一个简单的 Rectangle 类型的对象。

// 使用对象字面量
let rectangle1 = {
  width: 100,
  height: 50,
  area: function() {
    return this.width * this.height;
  }
};

console.log(rectangle1.width);
console.log(rectangle1.height);
console.log(rectangle1.area());

// 使用构造函数
function Rectangle(width, height) {
  this.width = width;
  this.height = height;
  this.area = function() {
    return this.width * this.height;
  }
}

let rectangle2 = new Rectangle(100, 50);

console.log(rectangle2.width);
console.log(rectangle2.height);
console.log(rectangle2.area());

// 使用 Object.create() 方法
const rectanglePrototype = {
  area: function() {
    return this.width * this.height;
  }
};

const rectangle3 = Object.create(rectanglePrototype, {
  width: {value: 100},
  height: {value: 50}
});

console.log(rectangle3.width);
console.log(rectangle3.height);
console.log(rectangle3.area());

// 使用 class 关键字
class Rectangle {
  constructor(width, height) {
    this.width = width;
    this.height = height;
  }

  area() {
    return this.width * this.height;
  }
}

let rectangle4 = new Rectangle(100, 50);

console.log(rectangle4.width);
console.log(rectangle4.height);
console.log(rectangle4.area());

在这个示例中,我们先使用了四种不同的方法创建了一个称为 Rectangle 的对象。我们成功地创建了四个具有相同属性和方法的对象,并通过输出它们的属性和方法验证了它们的正确性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS创建对象几种不同方法详解 - Python技术站

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

相关文章

  • githead意思详解和版本回退

    GitHead意思详解和版本回退 GitHead,顾名思义就是指Git中HEAD的意思。在Git中,HEAD指向当前的提交版本,也就是一直打开的分支中最近一次提交的版本。 当我们在进行版本回退操作时,实际上就是移动HEAD指针,让它指向需要回退版本的那个提交。Git中提供了多种回退版本的方式,下面分别介绍一下。 直接回退到某个版本 我们可以使用命令git r…

    其他 2023年3月28日
    00
  • Java编程实现递增排序链表的合并

    要实现递增排序链表的合并,可以采用归并排序的思想:将两个已经排好序的链表合并成一个更大的有序链表。 步骤如下: 首先,判断两个链表是否为空,若有一个为空,则返回另一个链表。 然后,比较两个链表的头结点的值,将值小的头结点作为新链表的头结点。 接着,递归地对剩余的部分进行合并,将小的节点插入到新链表的末尾。 下面是Java代码实现: public class …

    other 2023年6月27日
    00
  • Android集成高德地图详细介绍

    Android集成高德地图详细介绍 高德地图是一款功能强大的地图服务,可以在Android应用中实现地图展示、定位、路径规划等功能。本攻略将详细介绍如何集成高德地图到Android应用中。 步骤一:申请高德地图API Key 在集成高德地图之前,需要先申请一个API Key。API Key是用于标识开发者身份和授权使用高德地图服务的密钥。 访问高德开放平台,…

    other 2023年10月13日
    00
  • 易语言创建大漠模块及免注册调用大漠

    以下是关于“易语言创建大漠模块及免注册调用大漠”的完整攻略,包含两个示例。 易语言创建大漠模块及免注册调用大漠 大漠插件是一款常用的自动化工具,可以帮助开发人员实现自动化操作。在易语言中,我们可以通过创建大漠模块来调用大漠插件。下面我们将介绍如何大漠模块和免注册调用大漠。 1. 创建大漠模块 以下是一个使用易语言创建大漠模块的示例: 打开易语言,创建一个新的…

    other 2023年5月9日
    00
  • thinkphp多层MVC用法分析

    ThinkPHP多层MVC用法分析 什么是多层MVC架构 多层MVC架构是指在基本的MVC(Model-View-Controller)架构基础上,增加了service层或者business层,旨在实现业务逻辑与表现逻辑的分离,并且增加了复杂业务逻辑的封装与重用。相较于传统的二层架构,多层MVC架构可以更好的优化系统架构,增强系统的可读性、可扩展性和可维护性…

    other 2023年6月27日
    00
  • Android中RecyclerView嵌套滑动冲突解决的代码片段

    当在Android中使用RecyclerView嵌套滑动时,可能会遇到滑动冲突的问题。这种冲突通常发生在嵌套的RecyclerView之间,或者在RecyclerView和其他可滑动的视图之间。下面是解决这个问题的完整攻略,包含两个示例说明。 1. 使用NestedScrollView解决RecyclerView嵌套滑动冲突 如果你的RecyclerView…

    other 2023年7月28日
    00
  • 欢迎加入强哥的android开发交流群

    以下是详细讲解“欢迎加入强哥的android开发交流群”的完整攻略: 步骤1:下载QQ或微信 强哥的android开发交流群是通过 QQ 或微信来进行交流的,因此,我们需要先下载并安装 QQ 或微信。 步骤2:添加强哥的QQ或微信 我们需要添加强哥的 QQ 或微信号,以便加入他的 android 开发交流群。以下是添加强哥的 QQ 或微信号的示例: QQ 号…

    other 2023年5月8日
    00
  • 海量数据Excel报表利器——EasyExcel(开场篇)

    海量数据Excel报表利器——EasyExcel(开场篇) Excel作为办公软件的代表,已经成为处理数据、制作报表的必备工具之一。但随着数据量的不断增大,Excel的限制和不足逐渐变得显露出来,如数据处理速度过慢、文件大小限制等问题逐渐变得引人注目。而一款名叫EasyExcel的Java开源框架,正是为了解决Excel在处理海量数据时遇到的种种问题而诞生。…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部