Πράσινη JavaScript

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πράσινη JavaScript

Δημοσίευση από cpulse » 02 Σεπ 2006 23:48

Που χρησιμεύει το δολλάριο στο JavaScript!;;

πχ..

Κώδικας: Επιλογή όλων

Fabtabs.prototype = {
	initialize : function(element) {
		this.element = $(element);
		var options = Object.extend({}, arguments[1] || {});
		this.menu = $A(this.element.getElementsByTagName('a'));
		this.show(this.getInitialTab());
		this.menu.each(this.setupTab.bind(this));
	},
...
}

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Πράσινη JavaScript

Δημοσίευση από skeftomilos » 03 Σεπ 2006 23:00

Το δολλάριο στη JavaScript είναι έγκυρος χαρακτήρας στα ονόματα μεταβλητών, ρουτινών και λοιπών identifiers. Δηλαδή τα παρακάτω είναι έγκυρα:

Κώδικας: Επιλογή όλων

var $1 = 5
var abc$ = 5
var $ = 5
Η library Prototype που έγινε πολύ δημοφιλής λόγω της ενσωμάτωσής της στο framework Ruby-On-Rails εγκαινίασε τη χρήση του δολλαρίου ως shortcut της μεθόδου document.getElementById. Δηλαδή ορίζει την παρακάτω ρουτίνα (απλοποιημένη εδώ):

Κώδικας: Επιλογή όλων

function $(id) {
  return document.getElementById(id)
}
...ώστε να μπορεί να γράψει κανείς...

Κώδικας: Επιλογή όλων

var element = $('div1')
...αντί για...

Κώδικας: Επιλογή όλων

var element = document.getElementById('div1')
Προσωπικά δε χρησιμοποιώ την Prototype, γιατί πάσχει από ένα θεμελιώδες σφάλμα κατά τη γνώμη μου. Ωστόσο η πρώτη δουλειά που κάνω όταν αρχίζω ένα project είναι να ορίζω τη ρουτίνα $(). :)
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πράσινη JavaScript

Δημοσίευση από cpulse » 04 Σεπ 2006 03:22

Καλά το σκέφτηκα στην αρχή.. φαντάστηκα κάτι σαν pointer to pointer. Σαν τα διπλά δολάρια στην PHP. Εκάνα και tests που δεν μου βγήκαν αλλά δεν φαντάστηκα αυτό που λές. Σε ευχαριστώ skeftomile.

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Πράσινη JavaScript

Δημοσίευση από Rapid-eraser » 10 Σεπ 2006 23:28

variable variable legete stnv php afto me ta dipla dolaria alla dev exei sxesi me to parapavo mou fevete :P
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πράσινη JavaScript

Δημοσίευση από cpulse » 10 Σεπ 2006 23:47

Τι ψάχνεις τώρα.. στο μυαλό μου όλα έχουν σχέση. Τα χω όλα κουλουβάχατα (για να μη πω την άλλη λέξη). :hammer:

theodark
Δημοσιεύσεις: 84
Εγγραφή: 15 Οκτ 2006 02:21
Τοποθεσία: Αθήνα

Πράσινη JavaScript

Δημοσίευση από theodark » 21 Οκτ 2006 16:55

skeftomilos έγραψε: Προσωπικά δε χρησιμοποιώ την Prototype, γιατί πάσχει από ένα θεμελιώδες σφάλμα κατά τη γνώμη μου.
Diladi? Ti "themeliodes sfalma" u mean? Pantos emena pou tin ekana molis tora download, mou fanike poly handy!

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Πράσινη JavaScript

Δημοσίευση από skeftomilos » 21 Οκτ 2006 19:49

TheoDark αν κοιτάξεις τον κώδικα της Prototype 1.4.0 θα δεις στις πρώτες γραμμές:

Κώδικας: Επιλογή όλων

Object.extend = function(...
Αυτό σημαίνει ότι προστέθηκε μία νέα μέθοδος με όνομα extend στo Object, που ειναι η constructor function όλων των κοινών αντικειμένων. Όμως το Object και τα members του ανήκουν στο global namespace της JavaScript, το οποίο μολύνεται ανεπανόρθωτα με αυτές τις επεκτάσεις. Το πρακτικό αποτέλεσμα είναι ότι η library γίνεται εχθρική προς τη συνύπαρξη με άλλες libraries, που μπορούν να είναι εξίσου κακοσχεδιασμένες ώστε να προσθέτουν και αυτές members στα build-in αντικείμενα, με συνέπεια συγκρούσεις ονομάτων και δυσεπίλυτα bugs.

Στην προηγούμενη έκδοση της Prototype (1.3.1) τα πράγματα ήταν πολύ χειρότερα:

Κώδικας: Επιλογή όλων

Object.prototype.extend = function(...
...που σημαίνει ότι η μόλυνση επεκτείνεται σε όλα τα αντικείμενα, τόσο τα build-in όσο και αυτά που φτιάχνει ο προγραμματιστής. Εκτός αυτού αλλάζει τη συμπεριφορά του βρόγχου for(...in...) σπάζοντας ακόμα περισσότερο ξένο κώδικα. Το σφάλμα διορθώθηκε λόγω της γενικής κατακραυγής, αλλά προβλήματα ακόμα υπάρχουν.

Εκτός αυτού δε βλέπω το λόγο να φορτώνω τη σελίδα που φτάχνω με 47 KB έξτρα κώδικα, όταν στα πιο απαιτητικά projects το αρχείο script.js δεν ξεπερνά τα 15-20 KB. Στο web δεν είναι καλό το πολύ. :-)
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

theodark
Δημοσιεύσεις: 84
Εγγραφή: 15 Οκτ 2006 02:21
Τοποθεσία: Αθήνα

Πράσινη JavaScript

Δημοσίευση από theodark » 01 Νοέμ 2006 00:37

Sosta! Poly kala to skeftikes skeftomile :P

Pantos h for...in symperiferetai ligo mystiria (h borei na min tin exo katalavei ego kala)....

P.x. sto Object pou leme, h toString() giati den fenete stin for...in? Kai genika, core methods & props apo ta vasika javascript objects (oxi apo html elements) den fenontai!

To allo pou egrapses den to katalava:

Κώδικας: Επιλογή όλων

Object.extend = function(...
Den nomizo oti exei effect etsi (akoma den tin exo xrisimopoihsei / dei tin prototype) ?

Sxetiki se ola ta pio pano h erotisi: Yparxei tropos na graftei kapos ena neo method alla xoris na to vlepei h for...in?

Me to size ok, symfono kai se afto. Kai go synithos kovo ta scriptakia mou se multiple files gia na xrisimopoio oti thelo (an kai yparxei kai to caching ton browsers fantazomai)...

Pantos gia kanena HTA den me xalaei :-P

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Πράσινη JavaScript

Δημοσίευση από skeftomilos » 01 Νοέμ 2006 18:56

Η for..in κάνει loop σε όλες τις ιδιότητες ενός αντικειμένου, εκτός από κάποιες που είναι "κρυμμένες". Π.χ. η toString() που αναφέρεις είναι κρυμμένη. Ο λόγος απ' όσο μπορώ να υποθέσω είναι γιατί οι build-in ιδιότητες είναι γνωστές μέσα από το εγχειρίδιο της γλώσσας, και η συμπερίληψή τους στο βρόγχο for..in περισσότερο θα δυσκόλευε παρά θα βοηθούσε. Δυστυχώς δεν υπάρχει τρόπος να δημιουργήσουμε μια δική μας property σε ένα αντικείμενο, και να την κρύψουμε από τον for..in loop, κάτι που θα έκανε αυτό το βρόγχο πιο χρήσιμο στην πράξη. Έτσι είμαστε συχνά αναγκασμένοι να γράψουμε:

Κώδικας: Επιλογή όλων

for (var p in obj) {
  if (typeof obj[p] != 'function') {
    ...
  }
}
Η σύνταξη Object.extend = ... προσθέτει μια ιδιότητα στον constructor, κάτι που ΔΕΝ επηρρεάζει τα αντικείμενα που κατάγονται από το object. Είναι απλά ένας τρόπος να βάλουμε κάπου μια function για να μη βρίσκεται στο global namespace. Η Prototype θα μπορούσε να είχε δημιουργήσει ένα namespace με όνομα π.χ. Prototype και να έβαζε εκεί τις ρουτίνες τις:

Κώδικας: Επιλογή όλων

var Prototype = {}
Prototype.extend = function() {...

Μία σχετική συζήτηση: Global Domination
Αναζήτηση στο google: JavaScript namespace pollution
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης