Koduję duży projekt w Javascript. Pamiętam, że ostatnia była przygodą, ponieważ zuchwały JS może szybko stać się nieczytelny i chcę, aby ten kod był czysty.
Cóż, używam obiektów do tworzenia biblioteki, ale istnieje kilka sposobów definiowania rzeczy w JS, co sugeruje ważne konsekwencje w zakresie, zarządzaniu pamięcią, przestrzeni nazw itp. EG:
- za pomocą
var
lub nie; - definiowanie elementów w pliku lub w
(function(){...})()
stylu jquery; - za pomocą
this
lub nie; - za pomocą
function myname()
lubmyname = function()
; - definiowanie metod w ciele obiektu lub używanie „prototypu”;
- itp.
Więc jakie są naprawdę najlepsze praktyki przy kodowaniu w OO w JS?
Wyjaśnienia akademickie naprawdę są tutaj oczekiwane. Link do książek jest mile widziany, o ile dotyczą one jakości i solidności.
EDYTOWAĆ :
Mam kilka odczytów, ale nadal bardzo interesują mnie odpowiedzi na powyższe pytania i wszelkie najlepsze praktyki.
javascript
oop
e-satis
źródło
źródło
Odpowiedzi:
Używanie `var` lub nie
Powinieneś wprowadzić dowolną zmienną z
var
instrukcją, w przeciwnym razie dotrze ona do zasięgu globalnego.Warto wspomnieć, że w trybie ścisłym (
"use strict";
) zgłasza się niezadeklarowane przypisania zmiennychReferenceError
.Obecnie JavaScript nie ma zasięgu blokowego. Szkoła Crockford uczy, jak umieszczać instrukcje var na początku treści funkcji , a Przewodnik po stylach Dojo mówi, że wszystkie zmienne powinny być deklarowane w możliwie najmniejszym zakresie . (
let
Instrukcja i definicja wprowadzona w JavaScript 1.7 nie jest częścią standardu ECMAScript).Dobrą praktyką jest wiązanie właściwości regularnie używanych obiektów ze zmiennymi lokalnymi, ponieważ jest to szybsze niż przeglądanie całego łańcucha zasięgu. (Zobacz Optymalizacja JavaScript pod kątem ekstremalnej wydajności i niskiego zużycia pamięci ).
Definiowanie elementów w pliku lub w `(function () {...}) ()`
Jeśli nie musisz docierać do obiektów poza kodem, możesz owinąć cały kod wyrażeniem funkcyjnym - nazywa się to wzorcem modułu. Ma zalety wydajnościowe, a także pozwala na minimalizację i zaciemnienie kodu na wysokim poziomie. Możesz także upewnić się, że nie zanieczyści globalnej przestrzeni nazw. Funkcje zawijania w JavaScript pozwalają również dodawać zachowania zorientowane na aspekt. Ben Cherry ma szczegółowy artykuł na temat wzoru modułu .
Używanie „tego” lub nie
Jeśli używasz pseudoklasycznego dziedziczenia w JavaScript, nie możesz go uniknąć
this
. Wybór wzoru dziedziczenia zależy od gustu. W innych przypadkach zapoznaj się z artykułem Petera Michaux na temat widżetów JavaScript Bez „tego” .Używanie `function myname ()` lub `myname = function ();`
function myname()
jest deklaracją funkcji imyname = function();
jest wyrażeniem funkcji przypisanym do zmiennejmyname
. Ta ostatnia forma wskazuje, że funkcje są pierwszorzędnymi obiektami i można z nimi zrobić wszystko, podobnie jak ze zmienną. Jedyna różnica między nimi polega na tym, że wszystkie deklaracje funkcji są podnoszone na szczyt zakresu, co może mieć znaczenie w niektórych przypadkach. W przeciwnym razie są równe.function foo()
to forma skrócona. Więcej informacji na temat podnoszenia można znaleźć w artykule Scoping i podnoszenia w JavaScript .Definiowanie metod w ciele obiektu lub używanie „prototypu”
To zależy od Ciebie. JavaScript ma cztery wzorce tworzenia obiektów: pseudoklasyczny, prototypowy, funkcjonalny i częściowy ( Crockford, 2008 ). Każdy ma swoje zalety i wady, zobacz Crockforda w swoich rozmowach wideo lub zdobądź książkę The Good Parts, jak już sugerował Anon .
Ramy
Sugeruję, abyś podniósł niektóre frameworki JavaScript, zapoznał się z ich konwencjami i stylem oraz znalazł te praktyki i wzorce, które najlepiej do Ciebie pasują. Na przykład Dojo Toolkit zapewnia solidną strukturę do pisania obiektowego kodu JavaScript, który obsługuje nawet wielokrotne dziedziczenie.
Wzory
Na koniec jest blog poświęcony badaniu typowych wzorców JavaScript i anty-wzorców . Sprawdź także pytanie Czy istnieją jakieś standardy kodowania dla JavaScript? w przepełnieniu stosu.
źródło
let
Oświadczenie i definicja wprowadzone w JavaScript 1.7 nie są częścią standardu ECMAScript.” Teraz jest częścią ES6.Mam zamiar zapisać kilka rzeczy, które przeczytałem lub zastosowałem, odkąd zadałem to pytanie. Więc ludzie, którzy go czytają, nie będą sfrustrowani, ponieważ większość odpowiedzi to ukryte RTMF (nawet jeśli muszę przyznać, sugerowane książki są dobre).
Wykorzystanie Var
Każda zmienna powinna być już zadeklarowana w wyższym zakresie w JS. Kiedy więc chcesz nowej zmiennej, zadeklaruj ją, aby uniknąć złych niespodzianek, takich jak manipulowanie zmienną globalną bez jej zauważania. Dlatego zawsze używaj słowa kluczowego var.
W make obiektu var zmienna private. Jeśli chcesz tylko zadeklarować zmienną publiczną, użyj
this.my_var = my_value
tego.Deklarowanie metod
W JS są licznymi metodami deklarowania metod. Dla programisty OO najbardziej naturalnym, a jednocześnie wydajnym sposobem jest użycie następującej składni:
Wewnątrz obiektu
Istnieje wada: funkcje wewnętrzne nie będą miały dostępu do „tego” z powodu śmiesznego zakresu JS. Douglas Crockford zaleca ominięcie tego ograniczenia za pomocą konwencjonalnej zmiennej lokalnej o nazwie „to”. Tak się staje
Nie polegaj na automatycznym końcu linii
JS próbuje automatycznie dodać
;
na końcu wiersza, jeśli go zapomnisz. Nie polegaj na tym zachowaniu, ponieważ dostaniesz błędy, które są bałaganem do debugowania.źródło
Najpierw należy przeczytać o programowaniu opartym na prototypach, aby wiedzieć, z jaką bestią masz do czynienia, a następnie zapoznać się z przewodnikiem po stylu JavaScript na stronie MDC i stronie JavaScript w MDC . Uważam też, że najlepiej jest wymusić jakość kodu za pomocą narzędzia, tj. JavaScript Lint lub inne warianty.
Najlepsze praktyki z OO brzmią bardziej jak chcesz znaleźć wzorce niż koncentrować się na jakości kodu, więc spójrz na wyszukiwarkę Google: wzorce javascript i wzorce jQuery .
źródło
Może chcesz sprawdzić Secrets of the JavaScript Ninja autorstwa Johna Resiga (jQuery). „Ta książka ma na celu pozyskanie pośredniego programisty JavaScript i przekazanie mu wiedzy niezbędnej do utworzenia od podstaw biblioteki bibliotek JavaScript”.
Projekt jest dostępny za pośrednictwem wydawcy: http://www.manning.com/resig/
Douglas Crockford ma również kilka fajnych artykułów JavaScript na swojej stronie głównej: http://www.crockford.com/
źródło
Często czuję się jak jedyny facet, który używa MooTools do mojego JavaScript.
Oznacza M y O bject O riented Tools, mootools.
Bardzo podoba mi się ich podejście do OOP w javascript. Możesz używać ich implementacji klas również z jquery, więc nie musisz porzucać jquery (chociaż mootools robi to wszystko równie dobrze).
W każdym razie, przeczytaj pierwszy link i przeczytaj, co myślisz, drugi link jest do dokumentów mootools.
MooTools & Inheritance
Klasy MooTools
źródło
Oto książka, która obejmuje większość baz:
Obiektowy JavaScript dla wysokiej jakości aplikacji i bibliotek
źródło