Javascript原型(prototype)问题

标签 javascript memory prototype

当我阅读有关 javascript 中的原型(prototype)时,我有一个问题。

假设我有以下函数和对象

Function #1:
function Rectangle(w,h){
    this.width = w;
    this.height = h;
    this.area = function(){return this.width * this.height}
}

var object1 = new Rectangle(10,5);
var object11 = new Rectangle(5,5);


Function #2:
function Rectangle(w,h){
    this.width = w;
    this.height = h;
}

Rectangle.prototype.area = function(){ return this.width * this.height; }

var object2 = new Rectangle(10,5);
var object22 = new Rectangle(5,5);

据我了解,object2 和 object22 使用的内存比 object1 和 object11 少,因为函数 #2 使用原型(prototype)。

这是正确的吗?

最佳答案

是的,理论上是正确的,因为函数 1 每次调用时都会为区域创建一个唯一的函数,而使用函数 2 创建的对象都引用一个公共(public)函数。

但是,每个 JavaScript 引擎都会有不同的优化,并且可以优化函数 1,以便在内部每个对象都指向相同的函数,直到其中一个对象被修改(这是必要的,因为就语言而言,每个函数都是唯一的,为一个函数附加一个属性不应影响其他函数)。

网络上关于每个浏览器执行的具体优化的文档很少,但这里有一些引用文献似乎指向某种形式的关闭优化:

关于Javascript原型(prototype)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5139720/

相关文章:

javascript - 出现错误 Uncaught SyntaxError : Unexpected token ILLEGAL while clicking on Onclick

javascript - 就地 Javascript 编辑插件

javascript - Amcharts - 移动水平条形图

memory - 为什么全局内存版本比我的 CUDA 代码中的常量内存更快?

java - (Android) 使用 getActivity() 会导致内存泄漏,但添加 get 应用程序上下文会导致错误 token 异常

javascript - 在 JavaScript 方法之间传递信息

javascript - 为什么我的基于 reduce 的平均函数返回 NaN?

javascript - 在express.js中,为什么当变量 'app'在其自己的定义中使用时没有错误?

scala - 如何恢复(垃圾收集)在 scala repl 中分配的内存?

javascript - ES6 检测函数是否在类实例的原型(prototype)链上