Tôi đang cố gắng mở rộng chuỗi để cung cấp băm của chính nó. Tôi đang sử dụng thư viện mật mã Node.js.Tại sao 'this' bên trong String.prototype tham chiếu đến một kiểu đối tượng, không phải kiểu chuỗi?
tôi mở rộng chuỗi như thế này:
String.prototype.hashCode = function() {
return getHash(this);
};
và tôi có một hàm getHash
trông như thế này:
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;
}
Chức năng hoạt động tốt khi gọi trực tiếp, như trong
var s = "Hello world";
console.log(getHash(s));
nhưng khi tôi thử:
var s = "ABCDE";
console.log(s.hashCode());
cuộc gọi phương thức không thành công. Có vẻ như this
trong các String.prototype.hashCode
được xác định là một đối tượng khi được gọi là crypto.hash.update
, nhưng một chuỗi được mong đợi. Tôi nghĩ rằng this
bên trong String.prototype
sẽ là chuỗi chính nó, nhưng đối với một số lý do nó trông giống như một đối tượng để getHash()
. Làm thế nào tôi có thể sửa chữa nó?
Tôi sẽ chỉ sử dụng 'sử dụng nghiêm ngặt', nhưng vẫn để lại nhận xét giải thích lý do tại sao nó được yêu cầu. Có khả năng hầu hết các nhà bảo trì sẽ không biết lý do. – Marcelo