Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%)
|
Witam,
potrzebuje pomocy z JS - choć do niedawna myślałem, że znam go dobrze (IMG:style_emoticons/default/tongue.gif) Mój cel to zrobienie obiekto-funkcji... Znamy coś takiego z jQuery jak "$". Ma jedną fajną właściwość, którą chcę zastosować w jednym miejscu otóż można się odwoływać:
jak to jest zrobione? Siedzę nad tym i albo to jest tak banalne, że tego nie dostrzegam, albo jest coś o czym nie wiem (IMG:style_emoticons/default/tongue.gif) Please help (IMG:style_emoticons/default/sad.gif) Ten post edytował Sephirus 30.11.2011, 10:18:45 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
Cytat - poddaje sie... Oboje wiemy, że w tytule tematu jest to totalnie zbędne. Popraw proszę.Co do problemu: To co opisałeś to podstawowa funkcjonalność "programowania obiektowego" w js. Kod function MojaKlasa(){
return MojaKlasa; } MojaKlasa.metoda = function(){ alert('bu'); } MojaKlasa().metoda(); MojaKlasa.metoda(); |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%)
|
Kurna rzeczywiście... :/ wiedziałem, że to coś banalnego...
kombinowałem z tworzeniem obiektu i przypisywaniem w deklaracji jego metod - nie wpadłem na to by dodać je po samej deklaracji... ehhh... Dzięki wielkie (IMG:style_emoticons/default/wink.gif) |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 86 Pomógł: 6 Dołączył: 31.05.2010 Ostrzeżenie: (0%)
|
Podczepię się jeśli pozwolicie, bo nie rozumiem jednej rzeczy:
Jak to działa? Mógłby ktoś mi to wytłumaczyć, bo nie czaje o co chodzi z tym returnem? I jeszcze jedna dziwna rzecz po przetestowaniu: jeśli używamy klasy tak: MojaKlasa.metoda(); to w tym returnie możemy dać 'return BlaBla' i też działa... Ten post edytował rasten 30.11.2011, 12:27:03 |
|
|
|
Post
#5
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
Cytat Jak to działa? Mógłby ktoś mi to wytłumaczyć, bo nie czaje o co chodzi z tym returnem? W php masz np. coś takiego: $obj->metodaobiektu()->innametodaobiektu(); a metodaobiektu ma w sobie poprostu: return $this; Dzięki temu łancuchowo możno coś robić. Tu w js jest niejako pokazałem podobny mechanizm. Cytat I jeszcze jedna dziwna rzecz po przetestowaniu: jeśli używamy klasy tak: MojaKlasa.metoda(); to w tym returnie możemy dać 'return BlaBla' i też działa... Tak, ale nie zadziała już to:MojaKlasa().metoda(); |
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 86 Pomógł: 6 Dołączył: 31.05.2010 Ostrzeżenie: (0%)
|
@nospor, dzięki wielkie już mi się rozjaśniło, chociaż szczerze nie mogę znaleźć w internecie opisu tworzenia w ten sposób obiektu. Ale działa:)
Próbowałem w tym Twoim sposobie przed return MojaKlasa ustawić właściwości i metody klasy za pomocą this. Coś nie mogę, czyli nie da się tutaj tego tak zrobić? |
|
|
|
Post
#7
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
Cytat Próbowałem w tym Twoim sposobie przed return MojaKlasa ustawić właściwości i metody klasy za pomocą this. Coś nie mogę, czyli nie da się tutaj tego tak zrobić? zapoznaj się z podstawami "obiektówki" w jsJest to odpowiednik metody statycznej w php MojaKlasa.metoda = function(){ Jest to odpowiedni metody obiektu w php. Tutaj this by dzialalo, pod warunkiem ze robiles zm = new MojaKlasa() MojaKlasa.prototype.metoda = function(){ (IMG:style_emoticons/default/smile.gif) |
|
|
|
Post
#8
|
|
|
Grupa: Zarejestrowani Postów: 86 Pomógł: 6 Dołączył: 31.05.2010 Ostrzeżenie: (0%)
|
Dobra już chyba rozumiem, ale jeszcze sobie coś doczytam. Dzięki (IMG:style_emoticons/default/smile.gif)
|
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%)
|
można obejść nie pisanie "new" by "this" działało w JS głównie na 2 sposoby:
Kod function Test(a){ if(this instanceof Test){ // ustaiwamy konstruktor przy tworzeniu instancji obiektu this.a = a; } else { // jeśli ktoś wywoła funkcję bez "new" return new Test(a); } }; Test.prototype = { alertA: function(){alert(this.a)} }; Test(33).alertA(); var o = Test(33); alert(o instanceof Test); Kod // DZIEDZICZENIE (no nie zupełnie tak się powinno dziedziczyć(IMG:style_emoticons/default/exclamation.gif) !) TAK COBY BEZ IFÓW I ZAPĘTLENIA // korzystając nie poprawnie z dziedziczenia w js function Test(a){ // obejście konstruktora - nie powinno tak się robić... return new Test2(a); }; Test.prototype = { alertA: function(){alert(this.a)} }; function Test2(a){ //faktyczny konstruktor - przy dziedziczeniu nie do końca tak się powinno robić this.a = a; } Test2.prototype = Test.prototype; Test(33).alertA(); var o = Test(33); alert(o instanceof Test); By w JS poprawnie dziedziczyć (chodzi o nadpisywanie i przesłanianie głównie metod) należy prototype przypisać do anonimowej funkcji i zwrócić instancję w deseń: Kod function instanceProto(proto){ var f=function(){}; f.prototype = proto; return new f; } // i dla przykładu potem można poprawniej np. // Test2.prototype = instanceProto(Test.prototype); jeśli nie robiliśmy takich dziwnych "zapętleń" to wywołać konstruktora przodka u potomka można w ten sposób, że po prostu w konstruktorze wołamy konstruktora przodka bez new lub korzystamy z odpowiedniej konstrukcji funkcji call bądź apply |
|
|
|
![]() ![]() |
|
Aktualny czas: 26.12.2025 - 02:59 |