Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][jQuery]Prototyp i atrybut
Mlodycompany
post 27.05.2015, 16:17:54
Post #1





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Witajcie, przejdę do konkretów.
[JAVASCRIPT] pobierz, plaintext
  1. Object.prototype.test = function() {
  2. return 'result';
  3. };
  4. $('body').attr({atrybut: 'wartosc'});
[JAVASCRIPT] pobierz, plaintext


Rezultat tego o to kodu jest taki, że <body> posiada 2 atrybuty, jeden o kluczu 'atrybut', drugi o kluczu 'test'. Niby prawidłowe zachowanie, ale zupełnie nie potrzebne w tym przypadku. Pytanie brzmi jak do jQuery'owego attr przekazać obiekt tak by prototypowane właściwości były nie widoczne?

Ten post edytował Mlodycompany 27.05.2015, 16:18:14
Go to the top of the page
+Quote Post
Comandeer
post 27.05.2015, 16:24:31
Post #2





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Hmm… a czy Ty wgl wiesz co robisz, gdy rozszerzasz Object.prototype?

Atrybuty i własności obiektu DOM z założenia są widoczne, więc nie widzę za bardzo powodu, dla którego miałyby nie być widoczne. Jeśli mają być niewidoczne, to prawdopodobnie kombinujesz nie w tym kierunku, co trzeba.


--------------------
Go to the top of the page
+Quote Post
Mlodycompany
post 27.05.2015, 16:31:07
Post #3





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


rozszerzając Object.prototype rozszerzam każdy obiekt o tą własność. To wiem. To że każdy atrybut DOM jest widoczny to też wiem. Zastanawiam się tylko czemu jQuery.attr nie bierze tylko własnych właściwości obiektu, lecz dorzuca te z prototypu. Skoro uważasz, że kombinuje nie w tym kierunku, to czy mógłbyś mnie naprowadzić jak osiągnąć zamierzony cel?
Go to the top of the page
+Quote Post
Comandeer
post 27.05.2015, 16:39:32
Post #4





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Z prostej przyczyny - wszystko, co ordynarnie wrzucasz do Object.prototype jest własnością typu enumerable, więc zwykła pętla to wykryje.

Jak to robić? Nie tykać Object.prototype, bo to proszenie się o kłopoty - zawsze. Prawdę mówiąc nie umiem nawet wymyślić dobrego powodu, dla którego chciałbyś zrobić coś takiego. Ale jeśli uważasz, że na pewno musisz to zrobić (uwierz mi - nie musisz wink.gif), to zostaje Object.defineProperty


--------------------
Go to the top of the page
+Quote Post
Mlodycompany
post 27.05.2015, 16:46:49
Post #5





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


To że Object.protype to zło to wiem nie od dziś, ale nadeszła ta chwila kiedy chciałbym zgłębić tego tajniki, więc siedzę i "rzeźbie". Po co taki sposób? Chciałbym w każdym obiekcie mieć swoją metodę. I tyle. Wiem, że mógłbym ją prototypować to 'swoich obiektów', ale w przypadku N obiektów robi się to już problematyczne.
Go to the top of the page
+Quote Post
Comandeer
post 27.05.2015, 17:14:50
Post #6





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


No to w takim wypadku i tak polecałbym stworzenie sobie podstawowej klasy i "dziedziczenie" z niej przy pomocy Object.create: http://jsfiddle.net/Comandeer/zL05ysqk/ O wiele bezpieczniejsze.


--------------------
Go to the top of the page
+Quote Post
Mlodycompany
post 27.05.2015, 17:29:05
Post #7





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Git majonez. Rozwiałeś moje wątpliwości a wraz z tym problem. Powiedz mi jeszcze czy tylko prototypowanie Object'a jest takie problematyczne czy innych obiektów też?
Go to the top of the page
+Quote Post
Comandeer
post 27.05.2015, 17:39:37
Post #8





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Wszystkich wbudowanych - tak. Jedynie polyfillowanie jest wskazane


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 09:07