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: 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 |
|
|
|
Sephirus Funkcja i obiekt w jednym 30.11.2011, 09:45:30
nospor Cytat- poddaje sie...Oboje wiemy, że w tytule tema... 30.11.2011, 10:03:00
Sephirus Kurna rzeczywiście... :/ wiedziałem, że to coś ban... 30.11.2011, 10:20:39
rasten Podczepię się jeśli pozwolicie, bo nie rozumiem je... 30.11.2011, 12:26:34
nospor CytatJak to działa? Mógłby ktoś mi to wytłumaczyć,... 30.11.2011, 12:30:38
rasten @nospor, dzięki wielkie już mi się rozjaśniło, cho... 30.11.2011, 13:50:37
nospor CytatPróbowałem w tym Twoim sposobie przed return ... 30.11.2011, 13:56:42
rasten Dobra już chyba rozumiem, ale jeszcze sobie coś do... 30.11.2011, 14:01:54 ![]() ![]() |
|
Aktualny czas: 27.12.2025 - 00:42 |