Ще стане ли някога 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 НЕ е, че той е прототипен език, а по-скоро че по някакъв начин се опитва да се маскира като класически ООП език, за да се почувства по-познат на старата гвардия.

Нито базираното на класа, нито базираното на прототипа е по своята същност грешно или правилно; но те са много различни. Други прототипни езици съществуват от доста време, но те не са имали толкова голяма популярност и впоследствие познаване на разработчиците, колкото езиците, базирани на класове.

Страхотно сравнително определение, което съм виждал използвано за това, е следното, с любезното съдействие на Ерик Елиът.

Базирано на клас: ООП => Обектно ОРИЕНТИРАНО програмиране

Прототипно базирано: OOP => САМО обектно програмиране

Тук има и страхотно видео от Ерик за прототипното наследяване

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

И IMHO, едно от най-добрите четива за прототипно срещу класическо наследяване; дори не е техническо четиво, а по-скоро философско.

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

person bigtunacan    schedule 16.07.2014