семантические имена для конструкторов / прототипов JS против классов - PullRequest
0 голосов
/ 05 декабря 2018

В 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, или если имена у меня естьданы они совершенно точно.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Rectangle - это функция конструктора

Да, это звучит хорошо.Это функция, которая создает новые экземпляры, поэтому описание подходит.

getArea - это метод-прототип

Метод - это функция как свойство, и вэтот случай действительно является частью прототипа.

someStaticMethod - это метод конструктораконструировать что-то.Я бы скорее назвал это методом в конструкторе .Однако я обычно называю это «статическим методом».

0 голосов
/ 05 декабря 2018

Названия, которые вы дали, довольно точны, за исключением того, что последнее может быть немного спорным:

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

Вы сказали:

someStaticMethod является метод конструктора

Вы можете назвать это так, или просто метод, но, по сути, да, все из ваших вопросов верны.

...