Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JS 创建对象的方式有哪些?【热度: 894】 #452

Open
yanlele opened this issue Jun 12, 2023 · 1 comment
Open

JS 创建对象的方式有哪些?【热度: 894】 #452

yanlele opened this issue Jun 12, 2023 · 1 comment
Labels
JavaScript JavaScript 语法部分
Milestone

Comments

@yanlele
Copy link
Member

yanlele commented Jun 12, 2023

关键词:JS 创建对象

  1. 使用对象字面量创建对象。
var obj = { 
  name: "John", 
  age: 30 
};
  1. 使用 Object 构造函数创建对象。
var obj = new Object();
obj.name = "John";
obj.age = 30;
  1. 使用构造函数创建对象。
function Person(name, age) {
  this.name = name;
  this.age = age;
}
var john = new Person("John", 30);
  1. 使用 Object.create() 方法创建对象。
var obj = Object.create(null);
obj.name = "John";
obj.age = 30;
  1. 使用类和继承创建对象。
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
}
var john = new Person("John", 30);
@yanlele yanlele added the JavaScript JavaScript 语法部分 label Jun 12, 2023
@yanlele yanlele added this to the milestone Jun 12, 2023
@yanlele
Copy link
Member Author

yanlele commented Jul 26, 2023

补充:

在 JavaScript 中,使用对象字面量创建对象的方式通常是最快的。这是因为对象字面量是在代码解析的过程中直接创建出来的,不需要额外的函数调用和实例化过程。而其他方式,如使用构造函数、new Object()、Object.create() 或者 class,都需要额外的执行步骤,可能包括函数调用、原型链查找等操作。

以下是五种创建对象的方式的性能对比:

  1. 对象字面量:由于对象字面量是直接在代码解析时创建的,所以它的创建速度是最快的。这种方式适用于简单的对象创建,且不需要额外的初始化或操作。

  2. 构造函数:使用构造函数创建对象的速度较快,但是需要额外的函数调用操作。构造函数会在每次创建对象时都执行一次,因此在大量创建对象的情况下可能会有性能影响。

  3. new Object():使用 new Object() 创建对象的速度较慢,因为它涉及到函数调用和实例化的过程。这种方式通常用于需要动态创建对象的情况,但在性能要求较高的情况下可能不是最佳选择。

  4. Object.create():使用 Object.create() 创建对象的速度比较慢,因为它需要通过原型链查找来创建对象。这种方式适用于需要继承原型的对象创建,但在性能要求较高的情况下可能不是最佳选择。

  5. class:使用 class 关键字创建对象的速度较慢,因为它实质上是使用构造函数和原型链来创建对象。这种方式适用于面向对象的编程风格,但在性能要求较高的情况下可能不是最佳选择。

使用对象字面量创建对象是最快的方式,适用于简单的对象创建。但对于复杂的对象创建和继承关系,可以选择其他方式。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
JavaScript JavaScript 语法部分
Projects
None yet
Development

No branches or pull requests

1 participant