在类中声明方法与在JavaScript中使用类原型之间的区别
当我们在一个类中声明我们的方法时有什么区别吗在类中声明方法与在JavaScript中使用类原型之间的区别,javascript,Javascript,当我们在一个类中声明我们的方法时有什么区别吗 class Foo { ... doSomething(){ ... } } 还是直接到类原型 class Foo { ... } Foo.prototype.doSomething = function(){ ... } 将方法定义为类的一部分时,某些限制适用: 它不能是箭头函数 它不能用作构造函数 使用.prototype.doSomething=符号时,这些限制不适用 这些限制也不适用于较新
class Foo {
...
doSomething(){
...
}
}
还是直接到类原型
class Foo {
...
}
Foo.prototype.doSomething = function(){
...
}
将方法定义为
类的一部分时,某些限制适用:
- 它不能是箭头函数
- 它不能用作构造函数
使用.prototype.doSomething=
符号时,这些限制不适用
这些限制也不适用于较新的(实验性的,在撰写本文时的第3阶段):
可以将箭头函数分配给这样的字段,也可以将函数分配给。在后一种情况下,该函数可以用作构造函数
但是,分配给实例字段的函数不是原型方法,而是实例成员,因此它与您在问题中选择的.prototype
方法不完全一致。如果您查看传输到ES<6的类代码,您会发现它是类似的,但是
简而言之,类将执行此操作(伪代码):
主要区别在于,一种样式是可读的,而另一种样式不是:-)对于所有正常用途,它们的行为是相同的
但是,它们在细节上确实有所不同:
- 分配的方法是匿名的,定义的方法具有
.name
- 分配的
函数
具有.prototype
并且是可构造的,而定义的方法没有
- 指定的方法是可枚举的,而定义的方法不是
- 指定的方法不能使用
super
关键字
这是一个JavaScript问题,与React Directly无关谢谢,刚刚编辑我们只做Foo.prototype.doSomething=function(){…}
仅当通过函数构造函数声明时
不是类实际上你可以做箭头函数(doSomething=()=>…
),根据建议,你的第一点是不正确的。尽管它是一个实例方法,而不是一个方法。因此,对于两个实例f1
和f2
,它不认为f1.doSomething==f2.doSomething
与原型上的方法相同。谢谢你们,我已经添加了这一信息并限定了这一点。
Object.defineProperty(Foo.prototype, 'doSomething', doSomething)