【问题标题】:semantic names for JS constructors/prototypes vs classesJS 构造函数/原型与类的语义名称
【发布时间】:2019-05-06 09:43:48
【问题描述】:

在 javascript es6 中,我们有可以执行以下操作的类:

class Rectangle {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }

  getArea() {
    return this.height * this.width
  }

  static someStaticMethod() {
    // does some utility or something
  }
}

这大致只是以下旧 es5 代码的语法糖:

function Rectangle() {
  this.height = height;
  this.width = width;
}

Rectangle.prototype.getArea = function() {
  return this.height * this.width
}

Rectangle.someStaticMethod = function() {
  // does some utility or something
}

在 es6 类中,标记以下内容似乎很简单:

  • Rectangle 是一个
  • getArea 是一个实例方法
  • someStaticMethod静态 方法

我正在教一门关于对象原型和类的课程,所以我想让上面的措辞正确。但另外...

在 es5 JS 的上下文中,上面的分类是什么?以下是我的尝试:

  • Rectangle 是一个构造函数
  • getArea 是一个原型方法
  • someStaticMethod是一个构造方法

我不完全确定它们在 es5 中是否应该与 es6 中的名称相同,或者我给它们的名称是否完全准确。

【问题讨论】:

  • 请注意,ES7 允许您直接在类上定义static 方法
  • @MatthewHerbst ES7 没有改变 static?
  • @MatthewHerbst 那是 ES6。唯一引入的 ES7/ES2016 语法是 **,它是 Math.pow() 的语法糖。
  • 术语“实例方法”有时用于区分自己的方法(在实例本身的构造函数中创建)和原型方法。但是,当您不谈论这种差异时,它仍然可以使用。其他选项:“普通方法”、“非静态方法”或只是“方法”。
  • @Bergi 在构造函数中设置的箭头函数绑定到实例。对我来说,它应该被称为实例方法而不是原型中设置的函数,因为它总是在该特定实例的上下文中执行。

标签: javascript ecmascript-6 terminology ecmascript-5


【解决方案1】:

你给出的名字非常准确,除了最后一个可能有点值得商榷:

Rectangle.someStaticMethod = function() {
  // does some utility or something
}

你说:

someStaticMethod 是一个构造方法

您可以这样称呼它,或者只是一种方法,但基本上,是的,您问题中的所有内容都是正确的。

【讨论】:

  • 是的,那绝对是我最不确定的方法,如果您必须在方法之前冒险使用您自己的话,您会选择哪种方法? =D
  • @AndrewKim 我不知道,也许是object method?还是literal method
【解决方案2】:

Rectangle是构造函数

是的,听起来不错。它是一个构造新实例的函数,所以描述很合适。

getArea 是一个原型方法

方法是作为属性的函数,在这种情况下,它确实是原型的一部分。

someStaticMethod是构造方法

这有点误导,因为它听起来好像是一种构造某些东西的方法。我宁愿称它为构造函数上的方法。不过,我通常称其为“静态方法”。

【讨论】:

  • 谢谢,第三个肯定是我最不舒服的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
相关资源
最近更新 更多