cuốn sách gpt4 ai đã làm

Loại String.call.call?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 15:34:29 26 4
mua khóa gpt4 Nike

Điều này đúng (chạy trong bảng điều khiển của Google Chrome):

typeof String.call.call === 'hàm'

nhưng gọi nó String.call.call()Đưa ra một lỗi cho biết đó không phải là một hàm:
Uncaught TypeError: String.call.call không phải là một hàm tại: 1:13

Tại sao bạn lại cố gắng gọi một hàm (dựa trên loại định nghĩa) sẽ đưa ra lỗi cho biết đó không phải là một hàm? Nó thực sự là một chức năng?

Lưu ý rằng điều này xảy ra với các lớp khác như Số, Hàm hoặc kế thừa .gọi thuộc các hạng mục khác. phương pháp.

câu trả lời hay nhất

Hãy thử chia phần này thành các phần dễ quản lý hơn.

String là một hàm tạo (hoặc kết hợp hàm tĩnh/hàm tạo, tuy nhiên bạn muốn gọi nó như thế nào), và do đó, nó kế thừa từ Hàm.prototype, vì nó là một hàm

gọi là một hàm thực thi ngữ cảnh của nó bằng cách sử dụng ngữ cảnh được cho trong đối số đầu tiên (cái này):

console.log(String.call(true));
console.log(Array.call(null));
console.log(Function.call('so?'));
console.log(Object.call(/thông báo cho tôi/));

chúng ta hãy xem Hàm.call() Một định nghĩa chính thức hơn về:

các gọi() phương thức gọi một chức năng với một nhất định cái này giá trị và lý lẽ được cung cấp riêng lẻ.

function.call(thisArg, arg1, arg2, ...)

Bây giờ, phần thú vị là nhận thấy rằng ba điều này giống hệt nhau:

'use strict';

var callRef = String.call; // Function.call, Array.call, Boolean.call, tất cả đều là ===

console.log(Chuỗi(/biến tôi thành một chuỗi/));
console.log(String.call(không xác định, /biến tôi thành một chuỗi/));
console.log(callRef.call(Chuỗi, không xác định, /biến tôi thành một chuỗi/));

callRef.call(Chuỗi) có nghĩa là, trong String được gọi trong bối cảnh của cuộc gọiRef(), tức là thực hiện String() và bối cảnh cũng như các tham số được cung cấp trong các tham số bên dưới.

Như chúng tôi nhớ, bối cảnh không quan trọng, nhưng bây giờ chúng tôi biết callRef.call() Tham số đầu tiên của确实quan trọng vì nó quyết định chức năng nào sẽ được thực thi vì nó cho biết cuộc gọiRef() Ngữ cảnh của nó là gì, nó sẽ được thực thi như một hàm và sử dụng ngữ cảnh được cung cấp trong đối số tiếp theo.

Bây giờ sự phản chiếu (phản ánh) vấn đề ban đầu, khi chúng ta cố gắng thực hiện String.call.call() Điều gì xảy ra? Chà, nếu một tham số không được chỉ định thì đó làundefined, và chúng tôi biếttypeof không xác định !== 'hàm'.

Đây là câu trả lời cuối cùng của tôi:

String.call.call() thực sự là một chức năng... nhưng tất cả những gì nó làm là cố gắng chuyển đổi undefined Được thực hiện như một chức năng, điều này rõ ràng là không.

String.call.call();

Tôi hy vọng đây là một lời giải thích thú vị và nhiều thông tin.

Giới thiệu về javascript - Loại String.call.call? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/44508484/

26 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress