2010-11-19 3 views
0

Im essayant de définir cette classe, puis instancier et appeler certains de ses méthodes.Je ne peux pas appeler les méthodes de tout objet en Javascript

function Layer(){ 
    this.image = null; 
    this.owned = false; 
    this.sim = false; 
    this.pos = 0.5; 
    this.vel = 0; 
    this.acc = 0; 
    this.lastup = millis(); 
    this.newpos = 0; 

    this.scrub = scrub; 
    function scrub(npos){ 
     this.newpos = npos; 
     this.vel = 0; 
     this.acc = 0; 
    } 
} 

dummy = new Layer(); 

dummy.scrub(0.8); 
// chrome says Uncaught TypeError: Object #<an Object> has no method 'scrub' 

Est-ce que je définis les méthodes correctement?

+3

supprimer this.scrub = gommage; – Chris

+0

Où 'millis' est-il défini? –

+5

@Chris - cela causerait * l'erreur. –

Répondre

2

Vous n'êtes pas définir votre méthode correctement. Au lieu de:

this.scrub = scrub; 
function scrub(npos){ ... } 

Il devrait être:

this.scrub = function(npos){ ... } 

Ou vous pouvez tout simplement se débarrasser de la ligne this.scrub = scrub; tout à fait.

+0

C'est ce que je voulais dire dans mon commentaire, désolé pour la confusion. – Chris

+0

Pourquoi serait-ce incorrect? La déclaration de la fonction est d'abord définie (par l'interpréteur), puis 'this.scrub' reçoit une référence à cette fonction déclarée. – user113716

+0

@Justin Mais s'il voulait * juste * se débarrasser de la ligne, alors scrub serait toujours une fonction privée, et donc pas appelable comme une méthode. 'this.scrub = function() {}' est nécessaire pour en faire une méthode appelable. –

1

Voici comment vous devez définir des fonctions si vous voulez être appelable « de l'extérieur »:

this.scrub = function(npos) { ... } 
+0

C'est effectivement ce qu'il a fait. – user113716

+1

non, tout aussi faux que tout le monde. – lincolnk

+0

@lincolnk Il appelle une méthode privilégiée - http://www.crockford.com/javascript/private.html –

Questions connexes