Khi sử dụng call()
và thiết lập this
luận đến một giá trị nguyên thủy, rằng giá trị nguyên thủy luôn được chuyển đổi sang một đối tượng, vì vậy bạn sẽ có được các đối tượng chuỗi thay vì chuỗi nguyên thủy
String {0: "t", 1: "e", 2: "s", 3: "t", length: 4, ...
Các tài liệu cho call()
trên MDN bang mà
thisArg
Giá trị của this
được cung cấp cho cuộc gọi đến hàm.
Lưu ý rằng đây có thể không phải là giá trị thực của phương thức: nếu phương thức là hàm trong mã chế độ không nghiêm ngặt, null
và undefined
sẽ được thay thế bằng đối tượng chung, và giá trị nguyên thủy sẽ được chuyển đổi thành đối tượng.
Vì vậy, trong chế độ không nghiêm ngặt các chuỗi giá trị nguyên thủy được chuyển đến một đối tượng, điều này cũng được quy định trong chế độ hạn chế nghiêm ngặt ECMA standard, Annex C
và ngoại lệ
Nếu this
là được đánh giá trong mã chế độ nghiêm ngặt, sau đó giá trị this
là không bị ép buộc đối tượng.
Giá trị này là null
hoặc undefined
không được chuyển đổi thành đối tượng chung và giá trị nguyên thủy không được chuyển đổi thành đối tượng bao bọc.
Các this
giá trị thông qua thông qua một cuộc gọi chức năng (bao gồm cả các cuộc gọi sử dụng Function.prototype.apply
và Function.prototype.call
) không cưỡng chế thông qua this
giá trị cho một đối tượng
Nó không phải 'call' rằng những thay đổi bất cứ điều gì. Đó là chế độ sloppy ép buộc giá trị 'this' này thành một đối tượng (ở đây, một đối tượng' String'). – Bergi