我只想允许调用 digest
方法一次,因此当计算完摘要后,函数将被删除,并且 that
是一个没有函数的简单对象。
var Content = function(filename) {
var that = {};
var name = path.basename(filename);
var digest = function(callback) {
fs.readFile(filename, function(err, data) {
that.hash = crypto.createHash('sha1').update(data).digest('hex');
delete that.digest; // IS THIS SAFE?
callback();
});
};
that.digest = digest;
that.name = name;
return that;
};
使用它:
var content = Content('/path/to/file');
content.digest(function() {
// content.hash is available
});
这是安全且良好的做法吗?
最佳答案
是的,它是安全的,因为删除只是删除该引用,它不会释放任何内存,因此您的函数仍然存在:
Unlike what common beliefs suggests, the delete operator has nothing to do with directly freeing memory (it only does indirectly via breaking references.
这是一个好的做法吗?好吧,这只是我的意见...我认为当您阅读该代码时并不太清楚(您需要阅读全部内容才能了解发生了什么),所以我会避免它而选择其他东西(如果您使用某种例如,对于延迟初始化,您可以使用另一个属性)。也就是说,在代码中添加适当的注释...
关于Javascript:调用时删除函数是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20264296/