代码之家  ›  专栏  ›  技术社区  ›  Stepan Suvorov bolelamx

在构造函数内部和外部定义公共方法有什么区别吗?[副本]

  •  2
  • Stepan Suvorov bolelamx  · 技术社区  · 10 年前
    class My {
    
      constructor() {
        this.myMethod1 = function(){};
      }
    
      myMethod2() {
    
      }
    }
    

    那么 我的方法1 我的方法2 ?

    1 回复  |  直到 10 年前
        1
  •  10
  •   Community Mohan Dere    8 年前

    在构造函数中定义方法会导致在首次构造对象时创建和分配函数,而在类主体中定义它会导致将方法添加到类的原型中。

    class My {
    
      constructor() {
        this.myMethod1 = function(){};
      }
    
      myMethod2() {
    
      }
    }
    
    console.log(My.prototype.myMethod1) //=> undefined
    console.log(My.prototype.myMethod2) //=> function myMethod2() { ... }
    

    实际上,出于性能原因以及整体可读性和语义正确性,通常最好将方法定义保存在类主体中。在某些边缘情况下,像这样在构造函数中分配方法可能是有意义的,但根据我的经验,这种情况非常罕见。

    有关将方法分配给原型与构造函数中的原型之间的技术差异的更多详细信息,请参见 Use of 'prototype' vs. 'this' in JavaScript?