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

标签 javascript class prototype

我想知道在 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/

相关文章:

javascript - DropZone.js 使用 ASP.Net MVC 上传多个文件

javascript - 在 Rails 应用程序中加载自定义 javascript 文件

javascript - Echarts饼图无法在laravel blade上渲染?

java - 调用 Object.getClass() 本身是否使用反射?

javascript - 添加到 Object.prototype 的方法重复无限次

javascript - 为什么Object.prototype的__proto__是另一个Object.prototype?

JavaScript - 使用原型(prototype)的构造函数

javascript - 是否应该避免在 AngularJS Controller 中包含常规 Javascript 对象?

java - 二十一点游戏,需要造型帮助

c++ - 树未创建