2011-09-16 4 views
0

Cela m'a rendu fou parce que je ne trouve rien sur Google. Peut-être que c'est parce que je ne connais pas la bonne terminologie pour chercher correctement. Mais c'est ce que j'essaie de faire. Je veux créer une fonction qui agit comme un objet.Travailler avec des objets et créer des méthodes en JavaScript qui renvoient des valeurs

Je pense que ça s'appelle une méthode, même si je peux me tromper. Check this out, ceci est un pseudo-code de ce que je voudrais qu'il fasse.

function myMethod(){ 
var p = this.getAttribute('x'); 
var p = p+1; 
return p; 
} 

function otherFunction(){ 
var q = document.getElementByID('Element').myMethod(); 
alert(q); 
} 

Ainsi, je ne peux pas obtenir ceci pour fonctionner. Il continue à dire myMethod() est undefined et pas une fonction.

+0

essayez-vous d'appeler myMethod sur le 'Element' trouvé avec le document.getElementById()? – bittersweetryan

Répondre

4

Si vous voulez que myMethod soit disponible sur les éléments, vous devez l'ajouter aux éléments 'prototype.

Element.prototype.myMethod = myMethod; 

Le concept de prototype est grande, mais il se résume au fait que les instances de fonctions ont une fonction disponible dans la façon que vous décrivez comme « comme un objet ».

Dans ce cas, tout élément de la page est une instance de la fonction Element. Par conséquent, tout élément aura .myMethod disponible, que vous pouvez appeler. (Element est une fonction bien que vous ne traitez pas vraiment - que les instances sont disponibles parce que vous les mettez là en HTML, de sorte que vous contourner en utilisant Element.)

Deuxièmement, si vous avez var p, puis un autre var p ne fonctionne pas avoir beaucoup de sens. Utilisez simplement p = p + 1 ou p++ (raccourci pour en ajouter un).

+2

Les interfaces Element et HTMLElement (et le reste et leurs prototypes) ne sont pas exposés dans IE7 et ci-dessous, pourrait être quelque chose à surveiller. – Chase

1
function myMethod(element){ 
    var p = element.getAttribute('x'); 
    var p = p+1; 
    return p; 
} 

function otherFunction(){ 
    var q = myMethod(document.getElementByID('Element')); 
    alert(q); 
} 

De toute évidence, il serait préférable de ne pas déclarer ces derniers dans la portée globale, mais est essentiellement que le javascript est à la recherche d'un myMethod() qui est membre de l'élément DOM que vous sélectionnez, mais vous avez effectivement déclaré fonction debout seul.

Une autre option serait d'ajouter la méthode via l'héritage du prototype.

Questions connexes