Có một số khác biệt. Nếu bạn sử dụng phương thức extend()
của Backbone, bạn sẽ bị mất trên đường cú pháp lớp của CoffeeScript như super
và các thuộc tính/phương thức tĩnh.
Model = Backbone.Model.extend
set: (attrs, options) ->
super
mà biên dịch để (không chính xác) ...
var Model;
Model = Backbone.Model.extend({
set: function(attrs, options) {
return set.__super__.constructor.call(this, arguments);
}
});
Bạn có thể sử dụng siêu cách này mặc dù:
Model = Bakbone.Model.extend()
Model::set = ->
super
mà biên dịch để (đúng) ...
var Model;
Model = Backbone.Model.extend();
Model.prototype.set = function() {
return Model.__super__.set.apply(this, arguments);
};
Hạn chế đối với các lớp học coffeescript, dependi Về cách bạn tổ chức và biên dịch mã của bạn, mỗi lớp có thể có chức năng __extends()
của CoffeeScript được thêm vào phần đầu của định nghĩa lớp trong javascript được biên dịch. Điều này bit thêm mã trùng lặp hàng chục lần có thể đáng kể bóng các tập tin của bạn. Đặc biệt đúng nếu sử dụng một khuôn khổ bao bọc mã của bạn trong các mô-đun common.js.
Vì vậy, tôi sẽ sử dụng Backbone's extend()
theo mặc định cho mã được biên dịch gọn gàng. Sau đó, khi bạn có một trường hợp đặc biệt mà sẽ là tốt đẹp để sử dụng cú pháp lớp coffeescript, sau đó đi trước và sử dụng nó ... sparingly.
Nguồn
2013-01-29 20:29:30
CoffeeScript tối ưu hóa mã khi biên dịch mã, mặc dù tệp kết quả có thể có nhiều ký tự hơn một chút sẽ không sử dụng lớp 'Coffee' thường thực thi hiệu quả hơn? – rudolph9