我想知道通过类体设置方法与JS中的原型绑定之间有什么区别。(如果有)
我目前正在开发Eloquent JavaScript示例,当作者首先在其主体内部创建带有一堆方法的类,然后使用以下方法创建另一个方法时,我感到很惊讶 className.prototype.methodName = function(){}
class Cat {
constructor() {
}
method1() {
console.log("m1");
}
}
Cat.protoype.method2 = function() {
console.log("m2");
}
最明显的区别是:
您可以使用第二种方法(包括本机方法)来改变每个类的原型,而第一种语法仅适用于声明自己的类(但另一方面,它可以使结构保持整洁)。
在大多数情况下,您还可以忽略其他差异:
1)类方法不可枚举,而直接设置属性会使它可枚举。
这将更等效于类语法:
Object.defineProperty(Cat.protoype, "method2", {
value() {
console.log("m2");
},
enumerable: false, // it's the default value, this is just for clarity
writable: true,
configurable: true,
});
2)super
仅可在对象/类本身的声明期间(在对象和类中)添加的方法中访问。
3).name
函数的第一个是“ test”,第二个是“ anonymous”。可以通过使函数为非匿名来更改,例如function method2() { ... }
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句