Thể hiện của javascript

Toán tử instanceof được nhắm mục tiêu kiểm tra xem một đối tượng có thuộc về một lớp cụ thể hay không. Nó cũng giúp tính đến việc thừa kế

Bây giờ, hãy sử dụng nó để xây dựng một hàm đa hình, xử lý các đối số khác nhau tùy thuộc vào loại của chúng

Cú pháp sau đây được sử dụng cho toán tử instanceof

Nó có thể trả về true trong trường hợp đối tượng thuộc Lớp hoặc lớp kế thừa từ nó

Đây là một ví dụ

Thể hiện của javascript
Toán tử thể hiện Javascript

class Dog {} let dog = new Dog(); . log(dog instanceof Dog);

Nó cũng có thể hoạt động với các hàm tạo

Thể hiện của javascript
Toán tử thể hiện Javascript

// thay cho class function Dog() {} console. log(new Dog() instanceof Dog);

Ngoài ra, nó hoạt động với các lớp dựng sẵn, chẳng hạn như Array

Thể hiện của javascript
kiểm tra lớp Javascript. “ví dụ của”

hãy mảng = [1, 2, 3]; . nhật ký (mảng cá thể của Mảng); . nhật ký (đối tượng mảng đối tượng);

Vui lòng xem xét thuộc về lớp Đối tượng. Lý do là Array kế thừa nguyên mẫu từ Object

Theo quy định, instanceof nghiên cứu chuỗi nguyên mẫu để kiểm tra. Cũng có thể áp dụng logic tùy chỉnh bên trong phương thức tĩnh Biểu tượng. hasInstance

Thuật toán obj instanceof Class hoạt động như sau

Thể hiện của javascript
Toán tử thể hiện Javascript

// thiết lập instanceOf kiểm tra giả định rằng // bất kỳ thứ gì có thuộc tính canEat đều là động vật Lớp động vật { tĩnh [Symbol. hasInstance](obj) { if (obj. ăn) trả về đúng; . ĐÚNG VẬY }; . log(obj instanceof Animal); . Động vật [Biểu tượng. hasInstance](obj) được gọi là

Vì vậy, nếu tồn tại một phương thức tĩnh Symbol. hasInstance, nó có thể được gọi là Class[Symbol. hasInstance](obj). Nó có thể trả về true hoặc false

Nhưng hầu hết các trường hợp không bao gồm Biểu tượng. hasInstance. Trong những trường hợp như vậy, bạn cần tuân theo logic tiêu chuẩn. obj instanceOf Class sẽ kiểm tra xem Class. nguyên mẫu giống như một trong những nguyên mẫu trong chuỗi nguyên mẫu obj

Đây là một ví dụ

obj.__proto__ === Class.prototype ?
  obj.__proto__.__proto__ === Class.prototype ?
  obj.__proto__.__proto__.__proto__ === Class.prototype ?
  ...
// if any answer is true, return true
// otherwise, if we reach the end of the chain, return false

Trong ví dụ trên con chó. __proto__ === Con chó. nguyên mẫu, câu trả lời được đưa ra ngay lập tức

Nếu có thừa kế thì so khớp ở bước thứ hai, như sau

Thể hiện của javascript
Đối tượng Javascript của lớp thể hiện

class Animal {} class Dog extends Animal {} let dog = new Dog(); . log(dog instanceof Dog); . __proto__ === Con chó. nguyên mẫu // con chó. __proto__. __proto__ === Động vật. nguyên mẫu

Hãy cùng xem hình ảnh minh họa bên dưới

Một phương pháp khác có thể được đánh dấu. Đó là objA. isPrototypeOf(objB), trả về true trong trường hợp objA nằm trong chuỗi nguyên mẫu và Lớp. vấn đề nguyên mẫu

Nó có thể dẫn đến kết quả phi thường khi thuộc tính nguyên mẫu được chuyển đổi sau khi đối tượng được tạo

Đây là một ví dụ

Thể hiện của javascript
Đối tượng Javascript của lớp thể hiện

function Dog() {} let dog = new Dog(); . nguyên mẫu = {}; . bảng điều khiển. log(dog instanceof Dog);

Như đã lưu ý, các đối tượng đơn giản có thể được chuyển đổi thành một chuỗi dưới dạng [đối tượng đối tượng], như ở đây

Thể hiện của javascript
Nguyên mẫu đối tượng Javascript thành chuỗi

cho obj = {}; . nhật ký (đối tượng); . nhật ký (obj. toString());

Đó là việc họ thực hiện. Tuy nhiên, tồn tại một tính năng ẩn, làm cho toString trở nên mạnh mẽ hơn thế. Nó có thể được sử dụng như một kiểu mở rộng, cũng như một kiểu thay thế cho instanceof

ToString tích hợp có thể được trích xuất từ ​​đối tượng, cũng như được thực thi trong ngữ cảnh của bất kỳ giá trị nào khác. Kết quả của nó phụ thuộc vào giá trị đó

  • Nó có thể là [số đối tượng] cho một số
  • Nó có thể là [đối tượng Boolean] cho một boolean
  • Nó có thể là [đối tượng Null] cho null
  • Nó có thể là [đối tượng không xác định] cho không xác định
  • [mảng đối tượng]. cho mảng

Nó được thể hiện trong ví dụ dưới đây

Thể hiện của javascript
Chuỗi nguyên mẫu đối tượng Javascript

// copy phương thức toString vào một biến cho tiện let objToString = Object. nguyên mẫu. toString; . nhật ký (objToString. cuộc gọi (mảng));

Thuật toán toString khám phá điều này trả về kết quả tương ứng

Đây là một ví dụ khác

Thể hiện của javascript
Chuỗi nguyên mẫu đối tượng Javascript

hãy để str = Đối tượng. nguyên mẫu. toString; . nhật ký (str. cuộc gọi (123)); . nhật ký (str. cuộc gọi (null)); . nhật ký (str. cuộc gọi (cảnh báo));

Hành vi Object toString có thể được tùy chỉnh, áp dụng một thuộc tính đối tượng duy nhất là Biểu tượng. toStringTag

Ví dụ như sau

Thể hiện của javascript
Nguyên mẫu đối tượng Javascript tostringtag

hãy để động vật = { [Ký hiệu. toStringTag]. "Động vật" }; . nhật ký ({}. toString. gọi (động vật));

Có thuộc tính như vậy cho hầu hết các đối tượng dành riêng cho môi trường. Ví dụ

Thể hiện của javascript
Nguyên mẫu đối tượng Javascript tostringtag

// toStringTag cho đối tượng và lớp dành riêng cho môi trường. bảng điều khiển. nhật ký (cửa sổ [Ký hiệu. toStringTag]); . nhật ký (XMLHttpRequest. nguyên mẫu [Ký hiệu. toStringTag]); . nhật ký ({}. toString. cuộc gọi (cửa sổ)); . nhật ký ({}. toString. cuộc gọi (XMLHttpRequest mới ()));

Vì vậy, bạn có thể nhận thấy rằng kết quả là Biểu tượng. toStringTag được bao bọc trong [đối tượng. ]

Các {}. toString. cuộc gọi có thể được sử dụng thay vì instanceof cho các đối tượng tích hợp bất cứ khi nào cần nhận loại dưới dạng chuỗi thay vì chỉ kiểm tra

Instanceof trong JavaScript là gì?

Toán tử instanceof kiểm tra xem thuộc tính nguyên mẫu của hàm tạo có xuất hiện ở bất kỳ đâu trong chuỗi nguyên mẫu của đối tượng hay không . Giá trị trả về là một giá trị boolean. Hành vi của nó có thể được tùy chỉnh với Symbol. hasInstance.

Instanceof và typeof trong JavaScript là gì?

Toán tử typeof và instanceof khá khác nhau. typeof trả về một loại thực thể mà nó được vận hành. thể hiện của trả về true nếu một đối tượng được tạo từ một hàm tạo đã cho và ngược lại là false . Tất cả các đối tượng không nguyên thủy là các thể hiện của Object , vì vậy điều đó sẽ luôn trả về true.

Chức năng của Instanceof() là gì?

instanceof là từ khóa được sử dụng để kiểm tra xem biến tham chiếu có chứa loại tham chiếu đối tượng đã cho hay không .

Làm cách nào để tìm phiên bản của đối tượng trong JavaScript?

Toán tử instanceof của JavaScript được sử dụng để kiểm tra loại đối tượng tại thời điểm chạy. Nó trả về một giá trị boolean (true hoặc false). Nếu giá trị trả về là true, thì nó chỉ ra rằng đối tượng là một thể hiện của một lớp cụ thể và nếu giá trị trả về là false thì không phải.