Станет ли когда-нибудь JavaScript «правильным» языком, основанным на классах?

Я имею в виду статью MDN о «будущих зарезервированных словах» JavaScript (для использования в новом строгом режиме) — https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Future_reserved_keywords . Все зарезервированные слова указывают на то, что JavaScript, возможно, будет следовать непрототипной процедуре наследования, но что это значит для уже разработанных приложений и модификаций? Кто-нибудь знает, как долго это были «зарезервированные слова будущего», и будут ли эти изменения известны в ближайшем будущем или нет?

Если это не то место, не стесняйтесь перемещать его.


person Keir Simmons    schedule 16.07.2014    source источник
comment
сюда точно не подходит. Я бы посоветовал вам вручную перенести этот вопрос в Programmers SE.   -  person Amit Joki    schedule 16.07.2014
comment
Я думаю, что большинство из них были зарезервированы, пока существует ECMAScript. Нет, я не думаю, что JS когда-либо станет традиционным языком, основанным на классах, но я считаю, что ECMAScript 6 будет использовать ключевое слово class для синтаксический сахар над прототипным наследованием.   -  person cookie monster    schedule 16.07.2014
comment
...вот ссылка на первое издание ECMAScript в формате PDF (1997). Он показывает class в своем списке будущих зарезервированных слов.   -  person cookie monster    schedule 16.07.2014
comment
Господи, надеюсь, они не испортят JS; у нас уже достаточно правильных языков, и они уступают место неподходящему JS по какой-то причине...   -  person dandavis    schedule 16.07.2014


Ответы (3)


Станет ли когда-нибудь JavaScript «правильным» языком, основанным на классах?

К счастью, НЕТ. Это является правильным языком, даже если он не основан на классах. Вы никогда не потеряете возможность создавать объекты без классов.

Я имею в виду статью MDN о «будущих зарезервированных словах» JavaScript '. Все зарезервированные слова указывают на то, что JavaScript, возможно, будет следовать непрототипной процедуре наследования.

Нет, маловероятно, что они откажутся от этого. Они просто хотят оставить все варианты открытыми для реализации этих функций и не дать вам использовать этот синтаксис.

Подобно черновикам Harmony для классов и текущему предложению ES6, большинство эти концепции могут быть хорошо реализованы в прототипном мире.

но что это значит для уже разработанных приложений и модификаций?

Немного. Все изменения в EcmaScript стараются быть максимально совместимыми с предыдущими версиями (помните, к чему все эти хлопоты со строгим режимом?).

Кто-нибудь знает, как долго это были «зарезервированные слова будущего», и будут ли эти изменения известны в ближайшем будущем или нет?

Статья дает хороший обзор, я думаю. Вы можете сравнить ES3, ES5 и черновик ES6 (возможно, даже предыдущие версии).

Как сказано выше, они не предназначены для того, чтобы стать «изменениями». Не забывайте, что в темные старые времена синтаксис JavaScript был основан на Java и унаследовал набор ключевых слов. Удаление типов Java и добавление новых ключевых слов для более мощных понятий можно рассматривать как определение направления в развитии EcmaScript.

person Bergi    schedule 16.07.2014

Все зарезервированные слова указывают на то, что JavaScript, возможно, будет следовать непрототипной процедуре наследования.

Нисколько. Есть разница между синтаксисом и семантикой. То, что вы создаете классы с ключевым словом class в Java, не означает, что то же самое происходит и в JavaScript. Под капотом языки ведут себя по-разному.

ES6 вводит синтаксис class:

class Person() {
  constructor(name) {
    this.name = name;
  }

  static create() { }

  sayName() {
    console.log(this.name);
  }
}

Похоже на "класс", верно? Но это всего лишь синтаксический сахар для функций-конструкторов и их объектов-прототипов:

function Person() {
  this.name = name;
}

Person.create = function() { };

Person.prototype.sayName = function() {
  console.log(this.name);
};

Ключевое слово static определяет функцию в функции-конструкторе вместо прототипа (например, Person.create вместо Person.prototype.create).

Точно так же я мог представить, что final в какой-то момент определит свойство как не writeable и не configurable.


Итог: маловероятно, что фундаментальные концепции такого языка, как JS, полностью изменятся.

person Felix Kling    schedule 16.07.2014
comment
+1, однако final, вероятно, будет означать, что свойство не может быть затенено на объектах, которые наследуются от него. - person Bergi; 16.07.2014
comment
Вот что подразумевает writeable: false: jsfiddle.net/SpPyc - person Felix Kling; 16.07.2014
comment
Да, но только для задания. setProperty это не касается: jsfiddle.net/SpPyc/1 (но я уверен, что они придумали бы что-нибудь разумное, если бы захотели реализовать final :-) - person Bergi; 16.07.2014
comment
Эээ... я понял :) Я просто хотел продемонстрировать, как новый синтаксис может быть выражен существующей функциональностью. Конечно, для некоторых вещей нам действительно нужно добавить или изменить поведение (например, область действия блока). - person Felix Kling; 16.07.2014

Прямо отвечая на вопрос, нет; это было бы огромным фундаментальным сдвигом в языке.

Большинство из них были зарезервированы на века. Один из самых больших недостатков JavaScript заключается НЕ в том, что это язык-прототип, а скорее в том, что он в некотором роде пытается маскироваться под классический язык ООП, чтобы сделать его более знакомым старой гвардии.

Ни основанный на классе, ни основанный на прототипе, он не является по своей сути неправильным или правильным; но они очень разные. Другие языки-прототипы существовали уже давно, но они не пользовались такой большой популярностью и, как следствие, знакомством с разработчиками, как языки, основанные на классах.

Отличное сравнительное определение, которое я видел, используется для этого, это следующее, любезно предоставленное Эриком Эллиоттом.

На основе классов: ООП => объектно-ориентированное программирование

На основе прототипа: ООП => ТОЛЬКО объектное программирование

Здесь также есть отличное видео от Эрика о наследовании прототипов.

http://ericleads.com/2013/06/classical-inheritance-is-obsolete-how-to-think-in-prototypal-oo/

И ИМХО, одно из лучших чтений о прототипном и классическом наследовании; даже не техническое чтение, а скорее философское.

http://carnotaurus.philipcarney.com/post/3010984357/classes-versus-prototypes-some-philosophical-and

person bigtunacan    schedule 16.07.2014