Tôi đang tìm kiếm một cách để thực hiện một nhiệm vụ nhất định và có nghĩa là, đi từTránh .call() và .apply() sử dụng .bind()
jQuery.when.apply(null, promiseArray).done(...)
để
when(promiseArray).done(...)
Như bạn có thể biết, .bind()
có thể được sử dụng để tạo ra một cái gì đó như đối số mặc định và cũng làm một số công cụ khá tiện lợi. Ví dụ, thay vì lúc nào cũng gọi
var toStr = Object.prototype.toString;
// ...
toStr.call([]) // [object Array]
chúng ta có thể làm điều đó như
var toStr = Function.prototype.call.bind(Object.prototype.toString);
toStr([]) // [object Array]
này là khá mát mẻ (thậm chí nếu có một penality hiệu suất gọi .bind()
như thế này, tôi biết điều đó và tôi nhận thức được nó), nhưng tôi thực sự không thể thực hiện được nó cho cuộc gọi jQuery .when
. Nếu bạn có một số lượng các đối tượng lời hứa không xác định, bạn thường đẩy chúng vào một mảng, sau đó có thể chuyển chúng vào .when
như trong đoạn mã đầu tiên của tôi ở trên.
tôi đang làm điều này cho đến nay:
var when = Function.prototype.apply.bind($.when);
Bây giờ chúng ta có thể đi như
when(null, promiseArray).done(...)
này hoạt động, nhưng tôi cũng muốn thoát khỏi sự cần thiết phải vượt qua trong null
rõ ràng mỗi thời gian. Vì vậy, tôi đã cố gắng
var when = Function.prototype.apply.bind($.when.call.bind(null));
nhưng đó ném vào tôi:
"TypeError: Function.prototype.apply called on incompatible null"
Tôi đoán tôi đang ngồi trên này quá lâu bây giờ và không thể nghĩ thẳng nữa. Nó cảm thấy như có một giải pháp dễ dàng. Tôi không muốn sử dụng bất kỳ chức năng bổ sung để giải quyết vấn đề này, tôi hoàn toàn sẽ prefere một giải pháp sử dụng .bind()
.
Xem ví dụ hoàn chỉnh ở đây: http://jsfiddle.net/pp26L/
'.bind ($ .Khi, null) '? – Raynos
@Raynos: yay, chà muối vào bản ngã bị thương của tôi ..: p – jAndy