2012-04-01 17 views
2

Wenn ich versuche this in meinem Javascript Prototyp zu verwenden wie so:Dieses Schlüsselwort in Javascript mit Prototypen verwenden?

Array.prototype.sample = function() { 
    return this[Math.floor (Math.random() * this.length)]; 
} 

Neben meinen Tests (Jasmine) implementieren:

describe('sample()', function() { 
    it('returns a random item of an array', function() { 
    orig_array = ['foo', 'bar', 'baz', 'qux']; 
    sampled_word = orig_array.sample(); 
    expect(orig_array).toContain(sampled_word); 
    }); 
}); 

Mein Test nicht bestanden. Diese Methoden waren ursprünglich Funktionen, die Argumente verwenden, um das Schlüsselwort this innerhalb des Prototyps zu verarbeiten, aber aufgrund der Tatsache, dass dies in einer kleinen Javascript-Bibliothek sein wird, würde ich es lieber als Prototyp implementieren. Ist das this Schlüsselwort in diesem Kontext korrekt, oder gibt es einen Fehler mit dem Prototyp, den ich nicht bekomme? Vielen Dank.

+0

* Reference: Array ist nicht definiert * –

+0

@CrescentFresh behoben, aber der Test ist immer noch nicht. Es heißt: 'TypeError: Objekt foo, bar, baz, qux hat keine Methode 'sample'. – beakr

+0

Bitte korrigieren Sie Ihre Frage, um den aktualisierten Code anzuzeigen. – kojiro

Antwort

2

Das Problem ist in diesem Teil des Codes.

Array.prototype.sample = function() { 
    return this[Math.floor (Math.random() * array.length)]; 
} 

einfach 'Array' ist nicht definiert. Der Code, der arbeiten sollte, ist

Array.prototype.sample = function() { 
    return this[Math.floor (Math.random() * this.length)]; 
} 
+0

Problem gelöst, mehrere Fehler in einigen früheren Code in der gleichen Datei. Sollte in Kürze wieder aufgenommen werden. Danke für die Hilfe. – beakr

Verwandte Themen