Tôi nhìn thấy trong Mozilla polyfill của fn.bind()
như thế này:Nếu chúng ta polyfill fn.bind() trong JavaScript, tại sao bạn phải kiểm tra loại "this"?
if (!Function.prototype.bind) {
Function.prototype.bind = function(oThis) {
if (typeof this !== 'function') {
// closest thing possible to the ECMAScript 5
// internal IsCallable function
throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');
}
// other code omitted here...
};
}
Tôi không hiểu lý do tại sao chúng ta phải kiểm tra các loại this
... bởi vì nếu chúng ta nói fn.bind()
và fn
là một chức năng, sau đó nó sẽ công việc và nếu fn
không phải là chức năng, thì fn.bind
sẽ không bao giờ đạt được Function.prototype.bind
bằng cách thừa kế nguyên mẫu. Vậy tại sao chúng ta phải kiểm tra loại this
?
Nếu ai đó thực sự vẫn cần polyfill 'Function.prototype.bind' là vì các công cụ JS cũ hơn không tuân thủ đầy đủ ES5, và sau đó hàm testof X ===" 'không nhất thiết có nghĩa là có thể gọi được . Ví dụ, trong IE8, 'typeof alert' là' "object" '. Xem thêm http://stackoverflow.com/questions/17975210 –
@ GOTO0 Đúng, vật chủ là một cơn đau ở cổ, đặc biệt trên IE. – Oriol