代码之家  ›  专栏  ›  技术社区  ›  Josh Smeaton

在Javascript中将函数分配给原型是否有内存性能优势?

  •  3
  • Josh Smeaton  · 技术社区  · 14 年前

    我读到向对象添加函数比向对象原型添加函数会占用更多内存。

    function Obj() {
        this.M = function() { // do something };
    }
    
    var o = new Obj();
    

    其思想是,对于Obj的每个构造,都会创建一个新函数并应用于Obj,从而增加内存使用。对于1000个Obj实例,需要创建1000个函数。

    function Obj() {
    
    }
    Obj.prototype.M = function() { // do something };
    
    var o = new Obj();
    

    对于1000个Obj实例,在本例中,只创建一个函数。总共节省999*sizeof(M)内存。

    真的是这样吗?如果是,以下内容属于哪一类:

    function Obj() {
        Obj.prototype.M = function() { // do something };
    }
    var o = new Obj();
    

    我刚刚开始使用这个方法来封装成员函数的创建,但是我想确保我没有做错事。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Community TheSoundDefense    4 年前
    function Obj() {
        Obj.prototype.M = function() { // do something };
    }
    var o = new Obj();
    

    好吧,正如您所猜测的,这将创建一个匿名函数,并在构建新对象的过程中将其分配给原型。这是毫无意义的, and slightly slower 奇怪的 M() 碰巧是的,它仍然会和你分享 全部的 对象实例:

    function Obj(name)
    {
      Obj.prototype.M = function() { alert("Hello, " + name); }
    }
    
    var shog = new Obj("shog");
    var josh = new Obj("josh");
      
    shog.M(); // alerts, "Hello, josh"
    josh.M(); // alerts, "Hello, josh"
    


    另请参见:

        2
  •  0
  •   jdc0589    14 年前