Javascript JS中类方法与className.prototype方法的区别
我想知道在JS中通过类主体和原型绑定设置方法有什么区别。(如有的话) 我目前正在研究一个雄辩的JavaScript示例,当作者首先创建了一个在其主体中包含大量方法的类,然后使用Javascript JS中类方法与className.prototype方法的区别,javascript,class,prototype,Javascript,Class,Prototype,我想知道在JS中通过类主体和原型绑定设置方法有什么区别。(如有的话) 我目前正在研究一个雄辩的JavaScript示例,当作者首先创建了一个在其主体中包含大量方法的类,然后使用className.prototype.methodName=function(){} class Cat { constructor() { } method1() { console.log("m1"); } } Cat.protoype.method2 = functi
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(){…}
我希望这有助于:“所有对象都可以通过原型链看到对对象原型对象的更改,除非受这些更改影响的属性和方法在原型链上被进一步覆盖。这提供了一种非常强大但潜在危险的机制来覆盖或扩展对象行为。”
不多。
类
只是较新的语法。是的,只是糖一样的东西。我不知道有什么实际的区别。没有区别。类语法只是后一个的语法糖。其他小的区别是超级
和方法的名称
,但我怀疑OP是否在乎关于这一点。@bergi哦,对了,我还没有考虑过。为了完整起见,我将添加它。它在原型上是不可枚举的,但绝对是可写的