gpt4 book ai didi

javascript - JS中类方法与className.prototype方法的区别

转载 作者:行者123 更新时间:2023-11-30 11:05:36 25 4
gpt4 key购买 nike

我想知道在 JS 中通过类主体设置方法与原型(prototype)绑定(bind)之间有什么区别。 (如果有的话)

我目前正在研究 Eloquent JavaScript 示例,当作者首先创建一个在其主体中包含大量方法的类,然后使用 className.prototype.methodName = function(){} 创建另一个方法时,我感到很惊讶

class Cat {
constructor() {
}

method1() {
console.log("m1");
}
}

Cat.protoype.method2 = function() {
console.log("m2");
}

最佳答案

最明显的区别是:

您可以使用第二种方法(包括 native 方法)改变每个类的原型(prototype),而第一种语法仅适用于声明您自己的类(但另一方面它使事情保持整洁和结构化)。

还有其他差异,在大多数情况下您可以忽略:

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() { ... }

关于javascript - JS中类方法与className.prototype方法的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55764645/

25 4 0