Ich versuche String zu erweitern, um einen Hash von sich selbst zu bieten. Ich verwende die Node.js Crypto-Bibliothek.Warum bezieht sich "this" in String.prototype auf einen Objekttyp, nicht auf einen Stringtyp?
Ich erweitere Zeichenfolge wie folgt:
String.prototype.hashCode = function() {
return getHash(this);
};
und ich habe eine getHash
Funktion, die wie folgt aussieht:
function getHash(testString) {
console.log("type is" + typeof(testString));
var crypto = require('crypto');
var hash = crypto.createHash("sha256");
hash.update(testString);
var result = hash.digest('hex');
return result;
}
Die Funktion funktioniert gut, wenn sie direkt aufgerufen, wie in
var s = "Hello world";
console.log(getHash(s));
aber wenn ich versuche:
var s = "ABCDE";
console.log(s.hashCode());
Der Methodenaufruf schlägt fehl. Es scheint, dass this
in der String.prototype.hashCode
als ein Objekt identifiziert wird, wenn crypto.hash.update
aufgerufen wird, aber eine Zeichenfolge erwartet wird. Ich dachte, dass this
innerhalb String.prototype
wäre die Zeichenfolge selbst, aber aus irgendeinem Grund sieht es aus wie ein Objekt getHash()
. Wie kann ich es reparieren?
Ich würde nur mit 'verwenden strikt' gehen, aber immer noch einen Kommentar zu erklären, warum es erforderlich ist. Es ist wahrscheinlich, dass die meisten Betreuer den Grund nicht kennen. – Marcelo