11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Est-il équivalent d'écrire :


Object.prototype.traiter = function (var1){.....};


ou :


function traiter(var1) {
...
}

Modifié par Florent V. (05 Aug 2009 - 17:31)
Salut,

function traiter(){alert('toto');}
Là tu déclares une méthode de l'objet window (aussi appelée fonction), donc censée être utilisée de la manière suivante :
window.traiter();
// ou, plus fréquemment :
traiter();

Object.prototype.traiter = function(){alert('toto');};
Là tu déclares une méthode pour tous les objets, donc censée être appelée comme ça :
monObjet.traiter();
Vu que tout est objet en Javascript, window va bien sûr récupérer cette méthode, mais tous les autres objets aussi, donc tu pourras faire :
window.traiter();
unObjetPerso.traiter();
'abcdef'.traiter();
[1, 2, 3].traiter();
uneFonction.traiter();
// etc.
Note que vu l'importance fondamentale d'Object pour un comportement correct, prévisible, et donc compatible de Javascript, il est déconseillé d'y toucher (un exemple simple de problème : http://erik.eae.net/archives/2005/06/06/22.13.54/ )
Modifié par marcv (06 Aug 2009 - 08:22)
var uneFonction = function() {
    alert('unefonction');
};
uneFonction.traiter = function() {
    alert('uneFonction.traiter');
};
uneFonction.traiter();

Modifié par marcv (06 Aug 2009 - 11:33)
J'ajoute au dire de marcv qu'il faut alors bien faire attention à où tu déclares ta fonction et à la façon dont tu l'appelles car window peut ne pas en être le contexte.

function myFunction() {
  alert(this);
}

var myOject = {
  myFunction: function() {
    alert(this);
  }
};

myFunction(); // [object Window]
window.myFunction(); // [object Window]
myOject.myFunction(); // [object Object]
myOject.myFunction.call(window); // [object Window]