Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Funkcja i obiekt w jednym, Jeśli ktoś zna budowe np. jQuery...
Sephirus
post
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ć:

[JAVASCRIPT] pobierz, plaintext
  1. $('#jakies_id').jakas_metoda(); // <- Tutaj do $ odwołujemy się jak do funkcji
  2.  
  3. $.jakas_metoda(); // <- a tutaj jak do obiektu...
[JAVASCRIPT] pobierz, plaintext


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
zegarek84
post
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
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 00:42