Wcześniej, gdy musiałem przechowywać kilka powiązanych zmiennych, tworzyłem klasę.
function Item(id, speaker, country) {
this.id = id;
this.speaker = spkr;
this.country = country;
}
var myItems = [
new Item(1, 'john', 'au'),
new Item(2, 'mary', 'us')
];
Ale zastanawiam się, czy to dobra praktyka. Czy są jakieś inne, lepsze sposoby na symulację struktury w JavaScript?
javascript
struct
nickf
źródło
źródło
Zawsze używam literałów obiektów
źródło
new READABLE_PART(ignore everything in here)
staje się bardzo łatwe do zeskanowania i samodokumentowania, a nie{read: "ignore", everything: "ignore", in: "ignore", here: "ignore"} // and then come up with READABLE_PART
w głowie. Pierwsza wersja jest czytelna podczas szybkiego przewijania w górę. Po drugie, refaktoryzujesz na struktury tylko po to, by zrozumieć.Prawdziwym problemem jest to, że struktury w języku mają być typami wartości, a nie typami odwołań. Proponowane odpowiedzi sugerują użycie obiektów (będących typami referencyjnymi) w miejsce struktur. Chociaż może to służyć swojemu celowi, omija punkt, w którym programista rzeczywiście chciałby korzyści z używania typów wartości (takich jak prymityw) zamiast typu referencyjnego. Po pierwsze, typy wartości nie powinny powodować wycieków pamięci.
źródło
Myślę, że stworzenie klasy do symulacji struktur podobnych do C, tak jak robiłeś, jest najlepszym sposobem.
To świetny sposób na grupowanie powiązanych danych i upraszcza przekazywanie parametrów do funkcji. Twierdzę również, że klasa JavaScript jest bardziej podobna do struktury C ++ niż klasy C ++, biorąc pod uwagę dodatkowy wysiłek potrzebny do symulacji rzeczywistych funkcji obiektowych.
Zauważyłem, że próba upodobnienia JavaScript do innego języka szybko się komplikuje, ale w pełni popieram używanie klas JavaScript jako struktur bez funkcji.
źródło
Podążając za odpowiedzią Markusa , w nowszych wersjach JS (myślę, że ES6) możesz stworzyć fabrykę 'struct' w prostszy sposób, używając funkcji strzałek i parametru reszty, jak poniżej:
Wynikiem tego jest:
Możesz sprawić, że będzie wyglądać podobnie do namedtuple w Pythonie:
A wyniki:
źródło
Używam obiektów w stylu JSON dla głupich struktur (bez funkcji członkowskich).
źródło
Zrobiłem małą bibliotekę, aby zdefiniować strukturę, jeśli pracujesz z kompatybilnością ES6.
Jest to parser JKT, możesz pobrać repozytorium projektu tutaj JKT Parser
Na przykład możesz stworzyć swoją strukturę w ten sposób
źródło
Konfiguracja wymaga więcej pracy, ale jeśli łatwość konserwacji przewyższa jednorazowy wysiłek, może tak być w Twoim przypadku.
Zalety:
źródło