Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][jQuery]Prototyp i atrybut
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Mlodycompany
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?
Comandeer
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.
Mlodycompany
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?
Comandeer
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
Mlodycompany
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.
Comandeer
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.
Mlodycompany
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ż?
Comandeer
Wszystkich wbudowanych - tak. Jedynie polyfillowanie jest wskazane
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.