2010-11-19 10 views
0

aufrufen Ich versuche, diese Klasse zu definieren, und später instanziieren Sie es und rufen Sie einige seiner Methoden auf.Ich kann keine Methoden eines Objekts in 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' 

Ich definiere die Methoden richtig?

+3

this.scrub = Gestrüpp löschen; – Chris

+0

Wo ist 'Millis' definiert? –

+5

@Chris - das würde * den Fehler verursachen. –

Antwort

2

Sie definieren Ihre Methode nicht korrekt. Statt:

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

es sein sollte:

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

Oder Sie könnten einfach ganz der this.scrub = scrub; Linie loszuwerden.

+0

Das meinte ich in meinem Kommentar, Entschuldigung für die Verwirrung. – Chris

+0

Warum würde es falsch sein? Die Funktionsdeklaration wird zuerst definiert (durch den Interpreter), dann erhält 'this.scrub' einen Verweis auf diese deklarierte Funktion. – user113716

+0

@Justin Aber wenn er * nur * die Linie loswerden würde, wäre Peeling immer noch eine private Funktion und daher nicht als Methode aufrufbar. 'this.scrub = function() {}' ist notwendig, um es zu einer aufrufbaren Methode zu machen. –

1

Dies ist, wie Sie Funktionen definieren, wenn man sie aufrufbar „von außen“ sein wollen:

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

Das ist effektiv, was er getan hat. – user113716

+1

nein, so falsch wie alle anderen auch. – lincolnk

+0

@lincolnk Es ist eine privilegierte Methode genannt - http://www.crockford.com/javascript/private.html –

Verwandte Themen