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

时间:2016-02-04 15:33:13

标签: javascript ecmascript-6

class My {

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

  myMethod2() {

  }
}

myMethod1 myMethod2 之间有什么区别吗?

1 个答案:

答案 0 :(得分:10)

是。在构造函数中定义方法会导致在首次构造对象时创建并分配函数,而在类体中定义它会导致将方法添加到类&# 39; s原型。

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?