Mam tło w OOP. Zacząłem dużo pracować z JavaScript. Wraz z rozwojem projektu coraz trudniej jest go utrzymać. W Javie stosuję zasady OOP, aby utrzymać wszystko pod kontrolą. Co powinienem zrobić z JavaScriptem, co powinienem zbadać, który ma na celu kontrolowanie aplikacji JavaScript?OOP vs JavaScript
Odpowiedz
Możesz zastosować zasady OOP do rozwoju Javascript. JavaScript używa prototypowego dziedziczenia, ale jest to szczegół implementacji. Koncepcje są wciąż takie same. Większość pojęć, które znasz, ma bezpośrednie odpowiedniki w javascript.
Inne metody wypróbowane i prawdziwe zastosowanie także:
1) pozostają suche - Nie powtarzaj się. Duplikat kodu jest zawsze zły.
2) Oddzielne zgłoszenia - Użyj wzorców MVC lub MVVM, aby zachować czystość kodu i wykonywać tylko jedną rzecz.
3) Test - Kiedy słyszę "Trudne do utrzymania", mój mózg tłumaczy to na brak testów. Z pewnością możesz pisać testy jednostkowe dla projektów javascript.
4) Code Review - Opinie kod może być dobrym sposobem odrzucenia powielane kod, kod, który nie został wykonany prawidłowo, nie sformatowany, itd ....
... cóż, wystarczająco blisko. Rozróżnienie jest jednak ważne, aby wiedzieć; na pewno warto się temu przyjrzeć. –
Co masz na myśli "wystarczająco blisko"? Czy się nie zgadzasz? – hvgotcodes
Prototyp nie jest synonimem podklasy; istnieją pewne różnice dotyczące sposobu, w jaki pola i funkcje są "adoptowane". Na przykład wiele obiektów współużytkujących prototyp dosłownie dzieli prototypowane pole, a zmiana go może zmienić właściwość dla wszystkich obiektów podrzędnych. –
W JavaScript, funkcje są obiektami; Mozilla Developer Network,McKoss,SitePoint, i JavaScript Kit wyjaśnić dalej.
Przykład JavaScript obiektu
function myObj() {
this.myMethod = function() {
alert('hello');
}
}
var demo_obj = new myObj();
demo_obj.myMethod();
wzorców utrzymać wszystko pod kontrolą
- Wzorce wymienione tutaj są zwłaszcza JavaScript.
- Use a Script Loader.
- Use a JS Framework.
- Lint your JavaScript. - Narzędzia są dostępne do uruchomienia tego na pulpicie w Rhino lub węźle.
- Minify your JS.
- Wzory wymienione tutaj są typowe dla OOP języków, a nie są zwłaszcza JavaScript.
- DRY - Nie powtarzaj się.
- Wzór obserwatora (pub/sub).
Anty-wzorców do niech rzeczy spod kontroli
- zanieczyszczanie przestrzeni nazw
- użycie eval()
- prototypowania przeciwko obiektu Object
- Inline Script Tagi.
- wykorzystanie document.write
A jak to odpowiada na pytanie? – delnan
Kiedy byłem w takiej samej sytuacji, zacząłem patrzeć na „tak jak inne”. Skończyło się na http://dojotoolkit.org/ i http://jquery.com i szukałem sposobu, w jaki implementują widgety/wtyczki, aby inne mogły rozszerzyć framework.
W ten sposób definiujesz obiekty i metody w javascript.
function SomeObj() {
this.someMethod = function() {
alert('boo');
}
}
var o_obj = new SomeObj();
o_obj.someMethod(); //alerts "boo"
Mam nadzieję, że to pomaga.
Można również użyć prototypu do tworzenia funkcji statycznych.
this.prototype.someMethod = function() {
alert('boo');
}
Proszę użyć * pierwszej wielkiej litery * w 'someObj'. Jest to standardowa konwersja nazw w języku JavaScript. Pokazuje, że należy "nowe" stworzyć instancję obiektu. Porównaj na przykład z 'var now = new Date();'. – Oleg
To prawda. Nazwy obiektów nawet zmieniły kolor na niebieski, teraz zaczynają się od wielkiej litery. – c0d3Junk13
Polecam dodatkowo skorzystać z http://www.jslint.com/ w celu weryfikacji kodu. Ty . Zobaczysz "Nazwa konstruktora" someObj "powinna zaczynać się od wielkiej litery" w poprzednim kodzie. Dodatkowo zauważysz, że powinieneś dołączyć ";" po 'this.someMethod = function() {alert ('boo'); } 'ponieważ jest to instrukcja przypisania. – Oleg
Innym sposobem definiowania proste obiekty i metody w javascript (bez potrzeby new
).
function creaeSomeObj() {
var that = {};
that.someMethod = function() {
alert('boo');
}
return that;
}
var o_obj = createSomeObj();
o_obj.someMethod(); //alerts "boo"
Ten wzór nie obsługuje dziedziczenia, ale wiele razy jest wystarczający.
Dlaczego "kontra"? JavaScript obsługuje programowanie obiektowe, ale nie w tradycyjny sposób oparty na klasach, który można zobaczyć na przykład w Jawa.
Sposób działania OOP JavaScript działa zazwyczaj pod nazwą "prototypowe dziedziczenie", a dokładniej "delegatywne prototypowe dziedziczenie". Można to sprowadzić do "jeśli szukasz obiektu" foo "w obiekcie i nie możesz go tam znaleźć, a następnie spróbuj wyszukać 'foo' wewnątrz obiektu 'prototyp". To znaczy, że przeszukiwanie właściwości to delegowane do prototypu obiektu (mówimy, że obiekt dziedziczy po właściwościach prototypu).
Sposób działania prototypowego dziedziczenia ma kilka konsekwencji. Na przykład:
- Obiekty w JavaScript są "dynamiczne" w tym sensie, że są tylko parą par nazwa-wartość. Nowe właściwości można dodawać i usuwać podczas wykonywania, więc są znacznie mniej "statyczne" niż obiekty w typowym dla klasy znaczeniu.
- drodze delegative prototypal prace spadkowe („jeśli nie można znaleźć prototyp tutaj, a następnie szukać tutaj zamiast”) oznacza, że jest o wiele prostszeniż klasycznego OOP. Z czysto prototypowego punktu widzenia nie potrzebujesz na przykład konstruktorów. "Metody" to zwykłe funkcje, które są dołączane do prototypu (co oznacza, że są dostępne jako właściwości wszystkich dziedziczących obiektów).
Są wady i zalety z obu prototypal i klasycznego dziedziczenia, ale ważne jest, aby pamiętać, że są one inny.
Obecnie JavaScript jest pod pewnymi względami zainspirowany językami Java i innymi klasycznymi językami, dlatego postanowili utworzyć składnię "podobną do klasy", aby ułatwić osobom uczącym się na lekcjach rozpoczęcie nauki. Nie będę się nad tym dużo rozpisywał; zostało to już udokumentowane w innych miejscach.
Ciekawe posty:
- hughfdjackson's introduction to JavaScript OOP - krótkie i więcej do-punktu,
- Sorella's longer "Understanding Javascript OOP" - raczej dogłębne i bardzo całkowitego zasobu.
Pluralsight ma kurs na ten temat: Structuring JavaScript Code, który może zapewnić pewien wgląd. Dwa zastrzeżenia: 1. Nie przeszedłem jeszcze kursu - ale zawartość wygląda świetnie i byłem pod wrażeniem innych kursów Pluralsight, które odbyłem, i 2. nie jest on darmowy (ale może być wart małych dolarów, jeśli oszczędza czas na drodze b/c masz lepszą strukturę kodu). Nie, nie pracuję dla Pluralsight.
Oprócz frameworka js wspomnianego w tym wątku, można również spojrzeć na Knockoutjs - świetne samouczki tutaj learnknockoutjs.com. Knockout koncentruje się na MVVM. Zauważ, że istnieje dobra dyskusja w stackoverflow comparing Backbone to Knockout, a Pluralsight ma również kurs na temat używania Knockout, który oglądałem i polecam.
- 1. Javascript dosłowny a funkcja oop
- 2. Zaletą stosując metodę w OOP JavaScript
- 3. javascript oop, instanceof i klasa podstawowa
- 4. Android i OOP - Global Variables vs Inherited Getters w Fragmentach
- 5. Douglas Crockford na Class Free OOP w JavaScript
- 6. Dlaczego warto używać obiektu object.prototype.constructor w javascript OOP?
- 7. JavaScript OOP - zgubiłem to w asynchronicznym wywoływaniu zwrotnym
- 8. OOP: dobry projekt klasy
- 9. OOP - bez GET/SET
- 10. Czy PowerShell obsługuje OOP?
- 11. Zamęt w koncepcji OOP?
- 12. OOP Projekt Pytanie
- 13. JavaScript: test vs exec
- 14. JavaScript window.scroll vs. window.scrollTo?
- 15. JavaScript VS zaokrąglanie PHP
- 16. Backbone.Wreqr vs JavaScript Object
- 17. UrlEncode - Javascript vs. C#
- 18. JavaScript querySelector vs. getElementById
- 19. Javascript - Argumenty Vs Funkcje zagnieżdżone Vs Wydajność
- 20. Obiekty javascript vs tablice vs JSON
- 21. Tworzenie klasy właściwości rozszerzalnych (OOP)
- 22. Prawo Demeter and OOP confusion
- 23. PHP-OOP rozszerzające dwie klasy?
- 24. JavaScript isPrototypeOf vs użytkowania instanceof
- 25. JavaScript Element.value vs Element.getAttribute ("wartości")
- 26. {} - 0 VS ({} - 0) w JavaScript
- 27. ++ someVariable Vs. someVariable ++ in JavaScript
- 28. Dojo vs YUI javascript ramy
- 29. Testowanie jednostek Javascript/JQuery z JSUnit vs Qunit vs XUnit
- 30. Kliknięcie elementu przy użyciu javascript vs actions vs webdriver?
Spójrz na Backbone.js, a może Coffeescript. Działają bardzo dobrze razem. – asawyer
JavaScript jest obiektowy. – Gumbo
sprawdź [helephant] (http://helephant.com/2008/08/17/how-javascript-objects-work/) dla niektórych pomysłów OO. – jbabey