在构造函数内部和外部定义公共方法之间有什么区别吗?

Ste*_*rov 2 javascript ecmascript-6

class My {

  constructor() {
    this.myMethod1 = function(){};
  }

  myMethod2() {

  }
}
Run Code Online (Sandbox Code Playgroud)

那么myMethod1myMethod2之间有什么区别吗?

Aje*_*i32 10

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

class My {

  constructor() {
    this.myMethod1 = function(){};
  }

  myMethod2() {

  }
}

console.log(My.prototype.myMethod1) //=> undefined
console.log(My.prototype.myMethod2) //=> function myMethod2() { ... }
Run Code Online (Sandbox Code Playgroud)

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

有关在原型和构造函数中分配方法之间技术差异的更多详细信息,请参阅在JavaScript中使用'prototype'与'this'?