JS中的类方法与className.prototype方法之间的区别

马蒂克

我想知道通过类体设置方法与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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

日志方法之间的区别

记录方法之间的区别

这与方法之间的区别

JS中定义函数/方法之间的区别?

静态方法和类方法之间的区别

MappedDiagnosticsLogicalContext类中的Set方法和SetScoped方法之间的区别

类和实例方法之间的区别

类和实例方法之间的区别

类对象方法声明之间的区别React?

Singleton类和Singleton方法之间的区别?

java String类中subSequence和subString方法之间的区别

在目标c中访问类方法。使用的是self还是classname?

构造函数与方法之间的区别

结构的方法签名之间的区别

Vue.js方法声明之间的区别

Kotlin中的OnclickListener方法之间的区别

angularJS中这些监视方法之间的区别?

通用方法与非通用方法之间的区别

虚拟方法和抽象方法之间的区别

静态方法和实例方法之间的区别

Swift:addingObjects方法与append方法之间的区别

Java-类“ ClassName”和公共类“ ClassName”之间的区别

类构造函数内的函数和内部类但外部构造函数(在js中)之间的方法有什么区别?

ClassName.m()和(new ClassName())。m()m()之间的区别是静态方法

在Startup类的Configure()方法中,服务的方法注入或构造函数注入之间有区别吗?

CoffeeScript中对基类方法和子类方法的调用之间有什么区别?

python抽象基类,mixin和抽象方法之间的区别

GLib-class_init和init类方法之间的区别

Blueprint类的timestamp()和dateTime()方法之间的区别