我想只允许调用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
});
这是安全和良好的做法吗?
答案 0 :(得分:2)
是的,这是安全的,因为删除只是删除了该引用,它没有释放任何内存,所以你的功能仍然存在:
与普通信念所暗示的不同,删除操作符与直接释放内存无关(它只能通过断开引用间接进行。
这是一个好习惯吗?那么这只是我的意见......我认为当你阅读那些代码时你不是很清楚(你需要全部阅读才能理解会发生什么)所以我会避免它支持别的东西(如果你正在使用某种代码)例如,懒惰初始化你可以使用另一个属性。这说法中有适当的评论...