Từ các tài liệu MDN trên Function.prototype.bind()
:
Phương thức bind () tạo ra một hàm mới, khi được gọi, từ khóa này được đặt thành giá trị được cung cấp, với một chuỗi các đối số đã cho trước bất kỳ được cung cấp nào khi hàm mới được gọi.
Vậy điều đó có ý nghĩa gì?!
Chà, hãy lấy một chức năng trông như thế này:
var logProp = function(prop) {
console.log(this[prop]);
};
Bây giờ, hãy lấy một đối tượng trông như thế này:
var Obj = {
x : 5,
y : 10
};
Chúng ta có thể liên kết chức năng của mình với đối tượng như thế này:
Obj.log = logProp.bind(Obj);
Bây giờ, chúng tôi có thể chạy Obj.log
bất cứ nơi nào trong mã của chúng tôi:
Obj.log('x'); // Output : 5
Obj.log('y'); // Output : 10
Điều này hoạt động, bởi vì chúng tôi ràng buộc giá trị của this
đối tượng của chúng tôi Obj
.
Nơi nó thực sự trở nên thú vị, là khi bạn không chỉ ràng buộc một giá trị cho this
, mà còn cho đối số của nó prop
:
Obj.logX = logProp.bind(Obj, 'x');
Obj.logY = logProp.bind(Obj, 'y');
Bây giờ chúng ta có thể làm điều này:
Obj.logX(); // Output : 5
Obj.logY(); // Output : 10
Không giống như Obj.log
, chúng tôi không phải vượt qua x
hoặc y
, bởi vì chúng tôi đã vượt qua những giá trị đó khi chúng tôi thực hiện ràng buộc của mình.
select = document.querySelector.bind(document)