通过原型在构造函数中使用方法定义方法——真的有性能差异吗?

阅读时长 4 分钟读完

JavaScript 中,可以通过构造函数来创建对象并添加方法。除此之外,还可以通过原型来定义方法,然后让所有实例共享这些方法。

但是,在构造函数中定义方法和在原型中定义方法,到底哪种方式更好呢?是否存在性能差异呢?本文将深入探讨这个问题,并提供一些指导意义。

构造函数中定义方法

我们先来看一下在构造函数中定义方法的代码示例:

-- -------------------- ---- -------
-------- ------------ ---- -
  --------- - -----
  -------- - ----

  ------------- - ---------- -
    ------------------- -- ---- -- - - --------- - - --- - -- - - -------- - - ----- -------
  -
-

--- ------- - --- --------------- ----
--- ------- - --- ------------- ----

------------------- -- ------ -- ---- -- ----- --- - -- -- ----- ----
------------------- -- ------ -- ---- -- --- --- - -- -- ----- ----

在这个例子中,我们定义了一个 Person 构造函数,它接受两个参数 nameage,并将它们存储为对象的属性。然后,我们在构造函数中定义了一个 sayHello 方法,它用于打印对象的信息。

上面的代码看起来很简单,但是它有一个明显的缺点:每次创建一个新对象时,都会重新定义一次 sayHello 方法。这意味着如果我们创建了 100 个对象,就会有 100 个相同但是独立的 sayHello 方法。

原型中定义方法

接下来我们看一下在原型中定义方法的代码示例:

-- -------------------- ---- -------
-------- ------------ ---- -
  --------- - -----
  -------- - ----
-

------------------------- - ---------- -
  ------------------- -- ---- -- - - --------- - - --- - -- - - -------- - - ----- -------
--

--- ------- - --- --------------- ----
--- ------- - --- ------------- ----

------------------- -- ------ -- ---- -- ----- --- - -- -- ----- ----
------------------- -- ------ -- ---- -- --- --- - -- -- ----- ----

在这个例子中,我们使用了构造函数的原型来定义 sayHello 方法。这意味着所有通过 Person 构造函数创建的实例都可以共享这个方法。

与在构造函数中定义方法相比,将方法定义在原型中具有以下优点:

  • 可以节省内存空间,因为所有对象共享同一个方法。
  • 对象创建时不需要重新定义方法,因此速度更快。

性能测试

虽然理论上,在原型中定义方法更优秀,但实际上它是否真的更快?我们可以进行一些简单的性能测试来验证这一假设。

-- -------------------- ---- -------
-------- ------------- ---- -
  --------- - -----
  -------- - ----

  ------------- - ---------- -
    ------------------- -- ---- -- - - --------- - - --- - -- - - -------- - - ----- -------
  -
-

-------- ------------- ---- -
  --------- - -----
  -------- - ----
-

-------------------------- - ---------- -
  ------------------- -- ---- -- - - --------- - - --- - -- - - -------- - - ----- -------
--

--- ------- - --- ---------------- ----
--- ------- - --- -------------- ----

------------------------
--- ---- - - -- - - -------- ---- -
  -------------------
-
---------------------------

------------------------
--- ---- - - -- - - -------- ---- -
  -------------------
-
---------------------------

在上面的代码中,我们定义了

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/14055

纠错
反馈