Hãy xem xét tôi có đoạn mã sauchức năng Bao bì và function.length
/*...*/
var _fun = fun;
fun = function() {
/*...*/
_fun.apply(this, arguments);
}
Tôi vừa bị mất dữ liệu .length
trên _fun
vì tôi đã cố gắng để quấn nó với một số logic chặn.
Sau đây không hoạt động
var f = function(a,b) { };
console.log(f.length); // 2
f.length = 4;
console.log(f.length); // 2
Các annotated ES5.1 specification states rằng .length
được định nghĩa như sau
Object.defineProperty(fun, "length", {
value: /*...*/,
writable: false,
configurable: false,
enumerable: false
}
Cho rằng logic bên trong fun
đòi hỏi .length
là chính xác, làm thế nào tôi có thể đánh chặn và ghi đè lên chức năng này mà không phá hủy dữ liệu .length
?
Tôi có cảm giác mình sẽ cần sử dụng eval
và số Function.prototype.toString
tinh vi để xây dựng chuỗi mới có cùng số đối số. Tôi muốn tránh điều này.
Bạn thực sự cần 'độ dài' để được đặt đúng không? Bạn có thể muốn xem https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind, nhiều thư viện cũng mô phỏng hành vi này. – Prusse
@Prusse cách liên kết sẽ khắc phục sự cố của tôi? – Raynos
chỉ là một gợi ý, không thể hiểu rõ mục tiêu của bạn, xin lỗi. – Prusse