javascript - 使用下面两个定义的方法的区别

标签 javascript

片段 1:

 var box = function() {};

 box.prototype.open = function {
 };

片段2:

  var box = function() {
      this.open = function() {
      };
  }

这两个有什么区别,哪个更好?

最佳答案

我们是否应该假设 box 是一个构造函数,所以您正在执行 new box()

如果是...

  • 第一个版本将在 box 构造函数创建的所有对象之间共享 open 函数。

  • 第二个将为从 box 构造函数创建的每个对象生成一个新的函数对象。

因此,第一个比第二个内存效率更高。


第一版:

    new box                 box prototype            object prototype
+--------------+          +--------------+          +--------------+
|              |          |              |          |              |
|              |--------->|  open func   |--------->|              |
|              |       /  |              |          |              |
+______________+      /   +______________+          +______________+
                     /
                    /
    new box        /
+--------------+  /
|              | /
|              |/
|              |
+______________+

第二个版本:

    new box                box prototype            object prototype
+--------------+          +--------------+          +--------------+
|              |          |              |          |              |
|  open func   |--------->|              |--------->|              |
|              |       /  |              |          |              |
+______________+      /   +______________+          +______________+
                     /
                    /
    new box        /
+--------------+  /
|              | /
|  open func   |/
|              |
+______________+

关于javascript - 使用下面两个定义的方法的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8868100/

相关文章:

javascript - 在处理 js 时无法从 PImage 获取像素 []

javascript - 是否可以将 php 变量分配给 jquery var,然后刷新该 jquery 变量

javascript - window.setTimeout 与 setTimeout?哪一个更好?

javascript - 子组件在vue js中使用父函数

javascript - 放置在模态中时无法识别 ID

javascript - 如何在 ECMAScript 6 中使用模块?

javascript - :inputText allow only decimal digits

javascript - 如何调试移动网站不工作,和/或为 safari 浏览器添加 javascript polyfill?

php - 维护大型查询字符串的最佳方法是什么?

javascript - 日期选择器格式