首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Class.prop,Class.prototype.prop和this.prop之间的区别是什么?

Class.prop,Class.prototype.prop和this.prop之间的区别是什么?
EN

Stack Overflow用户
提问于 2019-07-26 08:48:19
回答 1查看 50关注 0票数 1

我无法理解类构造函数中声明的属性、类原型中的属性和类中直接声明的属性之间的差异/原因/利弊。

代码语言:javascript
复制
Class Human {
  constructor() {
    this.a = 0;
  }
}

Human.prototype.b = 1;

Human.c = 2;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-26 10:37:12

还有一个相关的例子,尽管在JS中它只能定义函数:

代码语言:javascript
复制
Class Human {
  d() {}  // Property d, its type is Function.
}

基本上,您的c与其他三个非常不同。您只能以Human.c的形式访问您的Human.c,而所有其他的都可以作为Human类实例的属性访问,例如new Human().a

要定义方法,最好的语法可能类似于d,它看起来非常自然。实际上,就像您将函数分配给Human.prototype一样,就像b一样。所以上面的例子相当于Human.prototype.d = function() {}

例如,变量(字段),a的语法可能是最好的。类的每个实例都接收自己的a。如果它被初始化为[]而不是0,那么它们中的每个都会有一个单独的数组,这很可能是您所期望的。

另一方面,分配给类原型(如您的b )的属性可以通过实例(因此new Human().b工作)可见,但它是类的所有现有实例都可以访问的单个对象--这意味着它们应该被视为不可变的,除非您喜欢糟糕的设计、全局可变状态等。因此,基本上可以在这里放置:

  • 函数-但是对于函数,更好的语法是方法语法(我的d),
  • 不可变的值--但是您也可以将它们定义为类之外的常量,或者使它们是静态的(如您的c),
  • 共享状态--最好不要有这种状态。

因此,我根本不会直接使用Class.prototype,而是将方法定义为方法,并在构造函数中定义字段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57216387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档