在类中声明方法或在JavaScript中使用类原型之间的区别

时间:2019-02-24 19:56:59

标签: javascript

当我们在类中声明方法时,有什么区别

class Foo {
   ...
   doSomething(){
     ...
   }
}

还是直接进入类原型?

class Foo {
    ...
}

Foo.prototype.doSomething = function(){
    ...
}

3 个答案:

答案 0 :(得分:2)

主要区别在于,一种样式可读,另一种则不是:-)对于所有正常用途,它们的行为相同。

但是,它们在细节上确实有所不同:

  • 分配的方法是匿名的,定义的方法具有select * from user_source where upper(text) like '%SYS_C007013%';
  • 分配的.name有一个function并且可以构造,定义的方法没有
  • 分配的方法是可枚举的,定义的方法不是
  • 分配的方法不能使用.prototype关键字

答案 1 :(得分:0)

class定义中定义为方法时,存在一些限制:

  • 它不能是箭头功能
  • 它不能用作构造函数

使用.prototype.doSomething =表示法时,这些限制不适用。

较新的field declaration feature也不具有这些限制(实验性的,在撰写本文时处于第3阶段):

可以将箭头功能分配给这样的字段,即function。在后一种情况下,该函数可以用作构造函数。

但是,分配给实例字段的函数不是 prototype 方法,而是实例成员,因此它并不完全与您使用.prototype替代方法对应在您的问题中。

答案 2 :(得分:0)

如果您查看class转换为ES <6的代码,您会发现它与quite different类似。

简而言之,将执行此操作(伪代码):

Object.defineProperty(Foo.prototype, 'doSomething', doSomething)