Đóng cửa là tuyệt vời cho logic không đồng bộ.
Nó chủ yếu là về tổ chức mã cho tôi. Có một loạt các hàm cục bộ để phân chia những gì mã đang làm là tốt.
create: function _create(post, cb) {
// cache the object reference
var that = this;
function handleAll(err, data) {
var rows = data.rows;
var id = rows.reduce(function(memo, item) {
var id = +item.id.split(":")[1];
return id > memo ? id : memo;
}, 0);
id++;
var obj = {
title: post.title,
content: post.content,
id: id,
// refer to the object through the closure
_id: that.prefix + id,
datetime: Date.now(),
type: "post"
}
PostModel.insert(obj, handleInsert);
}
// this function doesn't use the closure at all.
function handleInsert(err, post) {
PostModel.get(post.id, handleGet);
}
// this function references cb and that from the closure
function handleGet(err, post) {
cb(null, that.make(post));
}
PostModel.all(handleAll);
}
Đây là một ví dụ khác về việc đóng cửa
var cachedRead = (function() {
// bind cache variable to the readFile function
var cache = {};
function readFile(name, cb) {
// reference cache
var file = cache[name];
if (file) {
return cb(null, file);
}
fs.readFile(name, function(err, file) {
if (file) cache[name] = file;
cb.apply(this, arguments);
});
}
return readFile;
})();
Và một ví dụ khác
create: function _create(uri, cb, sync) {
// close over count
var count = 3;
// next only fires cb if called three times
function next() {
count--;
// close over cb
count === 0 && cb(null);
}
// close over cb and next
function errorHandler(err, func) {
err ? cb(err) : next();
}
// close over cb and next
function swallowFileDoesNotExist(err, func) {
if (err && err.message.indexOf("No such file") === -1) {
return cb(err);
}
next();
}
this.createJavaScript(uri, swallowFileDoesNotExist, sync)
this.createDocumentFragment(uri, errorHandler, sync);
this.createCSS(uri, swallowFileDoesNotExist, sync);
},
Thay thế cho việc sử dụng bao đóng là biến cà ri thành các hàm sử dụng f.bind(null, curriedVariable)
.
Nói chung, logic lập trình không đồng bộ sử dụng các cuộc gọi lại và trạng thái thao tác trong các cuộc gọi lại hoặc phụ thuộc vào việc đóng gói hoặc đóng cửa. cá nhân tôi thích đóng cửa.
Đối với việc sử dụng thừa kế nguyên mẫu, nó cho phép OO? Liệu thừa kế nguyên mẫu có thực sự cần phải làm nhiều hơn thế để nó được coi là "hữu ích". Đó là một công cụ thừa kế, nó cho phép thừa kế, đủ hữu ích.