Pytanie Słowo kluczowe klasy w języku JavaScript


Według Ten artykuł Powinien to być JavaScript 2.0 do zdefiniowania klasy. Jednak nigdy tego nie widziałem w praktyce. Tak więc pytanie. Jak używać słowa kluczowego class i jaka jest różnica między sposobem obsługi JavaScript 1.x?


33
2017-11-13 12:37


pochodzenie


Słowa "Luty 1999 Draft" dużymi czerwonymi literami na górze strony powinny być wskazówką, że artykuł prawdopodobnie nie ma większego znaczenia dla realnego świata ;-) - NickFitz
Masz na myśli szkic HTML 5, który jest teraz specem? ;) - Vladimir Kocjancic
Dobra uwaga - chociaż HTML5 został ostatnio zaktualizowany :-) - NickFitz


Odpowiedzi:


Powód, dla którego nigdy nie widziałeś class w praktyce używane jest słowo kluczowe wszystkie obecne implementacje JavaScriptu to 1.x.

JavaScript 2.0 został włączony do ECMAScript 4, który był raczej niepopularny i tak nigdy nie dotarli do prawdziwego świata.

Aby odpowiedzieć na twoje pytanie, w jaki sposób korzystasz z class słowo kluczowe? Nie możesz.


43
2017-11-13 12:42



Dziękuję za Twój komentarz. Zabawne jednak. Visual Studio 2008 rozpoznaje go jako prawidłowe słowo kluczowe podczas pisania pliku JavaScript. - Vladimir Kocjancic
@Validimir - VS2008 prawdopodobnie rozpoznaje słowo kluczowe class, ponieważ możesz go użyć w JScript.NET. - Dave Webb
klasa (wraz z wieloma innymi słowami kluczowymi java) jest słowem zastrzeżonym, więc teoretycznie język może dodawać wsparcie bez przerywania istniejących programów. Na liście jest pełna lista developer.mozilla.org/en/Core_JavaScript_1.5_Reference/.... - Matthew Crumley
Możesz teraz użyć class słowo kluczowe zaczyna ECMA6 (aka ECMA 2015), jak wspomniano w postu @ AkhilArjun poniżej. - RBT


Wiem, że to stary post, ale na dzień dzisiejszy, tj. Wraz z nadejściem ECMAScript 6 możemy zadeklarować klasy javascript.

Składnia wygląda następująco:

class Person{
  constructor(name){
    this.name = name;
  }
  printName(){
    console.log('Name is '+this.name);
  }
}
var john = new Person('John Doe');
john.printName(); // This prints 'Name is John Doe'

Kompletny przewodnik do tego można znaleźć w ten post


37
2018-06-27 10:27





Nigdy nie widziałeś tego w praktyce, ponieważ praktycznie nic nie obsługuje JavaScript 2.0. Ten szkic pochodzi ze specyfikacji, która umarła, zanim stała się czymś innym niż szkicem.


5
2017-11-13 12:42





Wciąż możesz budować klasy w JS oczywiście używając prototypu!

var foo = function() {
  this.hurrah = "yay!";
  return this;
}

foo.prototype.doit() {
  alert(this.hurrah);
}

2
2018-04-21 04:43



-1 Nawet nie zdalnie odpowiada na pytanie. - Ben


Jeśli masz środowisko Java lub C #, oto jak zdefiniować klasę w JavaScript

var MyClass = function (f, l){//constructor 
    //private members
    var firstName = f,
        lastName = l,
        fullName = function () { //fullName is a private function
            return firstName + " " + lastName;
        };
    return {
        //public members
        getFullName: fullName 
    };
}

var output = document.getElementById('Output'); //<div id="Output"></div>
var myName = new MyClass("First", "Last");
output.innerHTML = myName.getFullName();

1
2017-09-08 14:41



To, co masz, nie jest całkiem klasą, to tylko przedmiot. Abyś mógł to nazwać klasą, musisz mieć konstruktora, który niczego nie zwraca, i zdolność dołączania rzeczy do jego prototypu, a także powinna istnieć metoda dziedziczenia z tej klasy. Nie można właściwie dziedziczyć z tego obiektu, ponieważ nie ma łańcucha prototypów. Zauważ, że takie podejście nie jest przyjazne dla pamięci, ponieważ przechowuje swoje metody w zamknięciu, zamiast na prototypie, ukrywa prywatne elementy, których standardowe prototypowe systemy klasy JS nie zawierają. - Juan Mendes


Wystarczy dodać sposób tworzenia klasy ECMA5.

Zauważ, że nie ma funkcji konstruktora w ten sposób (ale możesz wywołać funkcję init, jeśli chcesz)

        var Class = {
          el: null,
          socket: null,

          init: function (params) {

            if (!(this.el instanceof HTMLElement)) {
              throw new Error('Chat room has no DOM element to attach on.');
            }

            return this.doStuff();

          },
          doStuff: function (params) {
            return this;
          }
        };

    var instanceofClass = Object.create(Class, {
      el: {
        value: document.body.querySelector('.what ever')
      },
      someMoreData: {
        value: [0,5,7,3]
      }
    }).init();

* edytuj przeniesiony opis z bloku kodu


0
2017-07-15 15:26