Hướng dẫn instanceof javascript - instanceof javascript

Các toán từ

class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
3 cho phép để kiểm tra xem một đối tượng thuộc về một lớp nhất định nào vậy. Nó cũng có tính kế thừa.

Kiểm tra như vậy có thể cần thiết trong nhiều trường hợp. Ở đây chúng ta sẽ sử dụng nó để xây dựng một hàm đa hình , một hàm xử lý các đối số khác nhau tùy thuộc vào kiểu của chúng.

  • 1. Toán tử instanceof
  • 2. Phần thêm: Object.prototype.toString cho các kiểu
    • 2.1. Symbol.toStringTag
  • 3. Tóm lược

1. Toán tử instanceof

2. Phần thêm: Object.prototype.toString cho các kiểu

obj instanceof Class

2.1. Symbol.toStringTag

3. Tóm lược

class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true

Cú pháp là:


// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true

Nó trả về

class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
4nếu
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
5thuộc về
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
6hoặc một lớp kế thừa từ nó.

let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true

Ví dụ:

Nó cũng hoạt động với các hàm xây dựng:

… và với các lớp dựng sẵn như

class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
7:

  1. Xin lưu ý rằng
    class Rabbit {}
    let rabbit = new Rabbit();
    
    // is it an object of Rabbit class?
    alert( rabbit instanceof Rabbit ); // true
    8cũng thuộc về lớp
    class Rabbit {}
    let rabbit = new Rabbit();
    
    // is it an object of Rabbit class?
    alert( rabbit instanceof Rabbit ); // true
    9. Đó là bởi vì nguyên mẫu
    class Rabbit {}
    let rabbit = new Rabbit();
    
    // is it an object of Rabbit class?
    alert( rabbit instanceof Rabbit ); // true
    7 được thừa hưởng từ
    class Rabbit {}
    let rabbit = new Rabbit();
    
    // is it an object of Rabbit class?
    alert( rabbit instanceof Rabbit ); // true
    9.
/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: 
Fanpage: https://www.facebook.com/cafedevn
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

// setup instanceOf check that assumes that
// anything with canEat property is an animal
class Animal {
  static [Symbol.hasInstance](obj) {
    if (obj.canEat) return true;
  }
}

let obj = { canEat: true };

alert(obj instanceof Animal); // true: Animal[Symbol.hasInstance](obj) is called

Thông thường,

class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
3kiểm tra một chuỗi nguyên mẫu. Chúng ta cũng có thể thiết lập một logic tùy chỉnh trong phương thức tĩnh

// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true
3.

Thuật toán của các công trình


// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true
4 đại khái như sau:

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 reached the end of the chain, return false

Nếu có một phương thức tĩnh


// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true
3, thì chỉ cần gọi nó :

// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true
6. Nó sẽ trả lại
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
4hoặc

// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true
8, và chúng ta đã hoàn thành. Đó là cách chúng ta có thể tùy chỉnh hành vi của
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
3. Ví dụ:

Hầu hết các lớp không có


// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true
3. Trong trường hợp đó, logic chuẩn được sử dụng:
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
1để kiểm tra xem
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
2có bằng một trong các nguyên mẫu trong chuỗi nguyên mẫu của
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
5 hay không.

class Animal {}
class Rabbit extends Animal {}

let rabbit = new Rabbit();
alert(rabbit instanceof Animal); // true

// rabbit.__proto__ === Rabbit.prototype
// rabbit.__proto__.__proto__ === Animal.prototype (match!)

Nói cách khác, so sánh cái này với cái khác:

Hướng dẫn instanceof javascript - instanceof javascript

Trong ví dụ trên

let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
4, do đó đưa ra câu trả lời ngay lập tức.

Trong trường hợp thừa kế, sẽ ở bước thứ hai:

Dưới đây là minh họa về những gì

let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
5so sánh với
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
6:

Nhân tiện, cũng có một phương thức objA.isPrototypeOf(objB), trả về

class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
4nếu
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
8có ở đâu đó trong chuỗi các nguyên mẫu của
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
9. Vì vậy, bài kiểm tra

// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true
4có thể được như
/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: 
Fanpage: https://www.facebook.com/cafedevn
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

// setup instanceOf check that assumes that
// anything with canEat property is an animal
class Animal {
  static [Symbol.hasInstance](obj) {
    if (obj.canEat) return true;
  }
}

let obj = { canEat: true };

alert(obj instanceof Animal); // true: Animal[Symbol.hasInstance](obj) is called
1.

function Rabbit() {}
let rabbit = new Rabbit();

// changed the prototype
Rabbit.prototype = {};

// ...not a rabbit any more!
alert( rabbit instanceof Rabbit ); // false

2. Phần thêm: Object.prototype.toString cho các kiểuPhần thêm: Object.prototype.toString cho các kiểu

2.1. Symbol.toStringTag

let obj = {};

alert(obj); // [object Object]
alert(obj.toString()); // the same

3. Tóm lược

Cú pháp là:

Nó trả về

class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
4nếu
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
5thuộc về
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
6hoặc một lớp kế thừa từ nó.

  • Ví dụ:
  • Nó cũng hoạt động với các hàm xây dựng:
  • … và với các lớp dựng sẵn như
    class Rabbit {}
    let rabbit = new Rabbit();
    
    // is it an object of Rabbit class?
    alert( rabbit instanceof Rabbit ); // true
    7:
  • Xin lưu ý rằng
    class Rabbit {}
    let rabbit = new Rabbit();
    
    // is it an object of Rabbit class?
    alert( rabbit instanceof Rabbit ); // true
    8cũng thuộc về lớp
    class Rabbit {}
    let rabbit = new Rabbit();
    
    // is it an object of Rabbit class?
    alert( rabbit instanceof Rabbit ); // true
    9. Đó là bởi vì nguyên mẫu
    class Rabbit {}
    let rabbit = new Rabbit();
    
    // is it an object of Rabbit class?
    alert( rabbit instanceof Rabbit ); // true
    7 được thừa hưởng từ
    class Rabbit {}
    let rabbit = new Rabbit();
    
    // is it an object of Rabbit class?
    alert( rabbit instanceof Rabbit ); // true
    9.
  • Thông thường,
    class Rabbit {}
    let rabbit = new Rabbit();
    
    // is it an object of Rabbit class?
    alert( rabbit instanceof Rabbit ); // true
    3kiểm tra một chuỗi nguyên mẫu. Chúng ta cũng có thể thiết lập một logic tùy chỉnh trong phương thức tĩnh
    
    // instead of class
    function Rabbit() {}
    
    alert( new Rabbit() instanceof Rabbit ); // true
    3.
  • Thuật toán của các công trình
    
    // instead of class
    function Rabbit() {}
    
    alert( new Rabbit() instanceof Rabbit ); // true
    4 đại khái như sau:

Nếu có một phương thức tĩnh


// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true
3, thì chỉ cần gọi nó :

// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true
6. Nó sẽ trả lại
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
4hoặc

// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true
8, và chúng ta đã hoàn thành. Đó là cách chúng ta có thể tùy chỉnh hành vi của
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
3. Ví dụ:

// copy toString method into a variable for convenience
let objectToString = Object.prototype.toString;

// what type is this?
let arr = [];

alert( objectToString.call(arr) ); // [object Array]

Hầu hết các lớp không có


// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true
3. Trong trường hợp đó, logic chuẩn được sử dụng:
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
1để kiểm tra xem
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
2có bằng một trong các nguyên mẫu trong chuỗi nguyên mẫu của
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
5 hay không.

Nói cách khác, so sánh cái này với cái khác:

class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
0

2.1. Symbol.toStringTagSymbol.toStringTag

3. Tóm lược

3. Tóm lược

class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
1

Cú pháp là:

class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
2

Nó trả về

class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
4nếu
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
5thuộc về
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
6hoặc một lớp kế thừa từ nó.

Ví dụ:

Nó cũng hoạt động với các hàm xây dựng:

… và với các lớp dựng sẵn như

class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
7:

Xin lưu ý rằng
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
8cũng thuộc về lớp
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
9. Đó là bởi vì nguyên mẫu
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
7 được thừa hưởng từ
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
9.
Thông thường,
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
3kiểm tra một chuỗi nguyên mẫu. Chúng ta cũng có thể thiết lập một logic tùy chỉnh trong phương thức tĩnh

// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true
3.
Thuật toán của các công trình

// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true
4 đại khái như sau:
Nếu có một phương thức tĩnh

// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true
3, thì chỉ cần gọi nó :

// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true
6. Nó sẽ trả lại
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
4hoặc

// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true
8, và chúng ta đã hoàn thành. Đó là cách chúng ta có thể tùy chỉnh hành vi của
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
3. Ví dụ:
Hầu hết các lớp không có

// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true
3. Trong trường hợp đó, logic chuẩn được sử dụng:
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
1để kiểm tra xem
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
2có bằng một trong các nguyên mẫu trong chuỗi nguyên mẫu của
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
5 hay không.
Nói cách khác, so sánh cái này với cái khác:Trong ví dụ trên
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
4, do đó đưa ra câu trả lời ngay lập tức.
Hầu hết các lớp không có

// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true
3. Trong trường hợp đó, logic chuẩn được sử dụng:
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
1để kiểm tra xem
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
2có bằng một trong các nguyên mẫu trong chuỗi nguyên mẫu của
class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
5 hay không.
Nói cách khác, so sánh cái này với cái khác:Trong ví dụ trên
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
4, do đó đưa ra câu trả lời ngay lập tức.
Trong trường hợp thừa kế, sẽ ở bước thứ hai:

Dưới đây là minh họa về những gì

let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
5so sánh với
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
6:

Nhân tiện, cũng có một phương thức objA.isPrototypeOf(objB), trả về

class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
4nếu
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
8có ở đâu đó trong chuỗi các nguyên mẫu của
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
9. Vì vậy, bài kiểm tra

// instead of class
function Rabbit() {}

alert( new Rabbit() instanceof Rabbit ); // true
4có thể được như
/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: 
Fanpage: https://www.facebook.com/cafedevn
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

// setup instanceOf check that assumes that
// anything with canEat property is an animal
class Animal {
  static [Symbol.hasInstance](obj) {
    if (obj.canEat) return true;
  }
}

let obj = { canEat: true };

alert(obj instanceof Animal); // true: Animal[Symbol.hasInstance](obj) is called
1.

Thật buồn cười, nhưng bản thân constructor của

class Rabbit {}
let rabbit = new Rabbit();

// is it an object of Rabbit class?
alert( rabbit instanceof Rabbit ); // true
6 không tham gia kiểm tra! Chỉ có chuỗi các nguyên mẫu và
let arr = [1, 2, 3];
alert( arr instanceof Array ); // true
alert( arr instanceof Object ); // true
2.

Điều đó có thể dẫn đến hậu quả thú vị khi một thuộc tính

/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: 
Fanpage: https://www.facebook.com/cafedevn
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

// setup instanceOf check that assumes that
// anything with canEat property is an animal
class Animal {
  static [Symbol.hasInstance](obj) {
    if (obj.canEat) return true;
  }
}

let obj = { canEat: true };

alert(obj instanceof Animal); // true: Animal[Symbol.hasInstance](obj) is called
4 được thay đổi sau khi đối tượng được tạo.

  • Giống như ở đây:
  • Chúng ta đã biết rằng các đối tượng đơn giản được chuyển đổi thành chuỗi dưới dạng
    /*
    Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
    @author cafedevn
    Contact: 
    Fanpage: https://www.facebook.com/cafedevn
    Instagram: https://instagram.com/cafedevn
    Twitter: https://twitter.com/CafedeVn
    Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
    */
    
    // setup instanceOf check that assumes that
    // anything with canEat property is an animal
    class Animal {
      static [Symbol.hasInstance](obj) {
        if (obj.canEat) return true;
      }
    }
    
    let obj = { canEat: true };
    
    alert(obj instanceof Animal); // true: Animal[Symbol.hasInstance](obj) is called
    5:
  • Đó là việc họ thực hiện
    /*
    Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
    @author cafedevn
    Contact: 
    Fanpage: https://www.facebook.com/cafedevn
    Instagram: https://instagram.com/cafedevn
    Twitter: https://twitter.com/CafedeVn
    Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
    */
    
    // setup instanceOf check that assumes that
    // anything with canEat property is an animal
    class Animal {
      static [Symbol.hasInstance](obj) {
        if (obj.canEat) return true;
      }
    }
    
    let obj = { canEat: true };
    
    alert(obj instanceof Animal); // true: Animal[Symbol.hasInstance](obj) is called
    6. Nhưng có một tính năng ẩn
    /*
    Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
    @author cafedevn
    Contact: 
    Fanpage: https://www.facebook.com/cafedevn
    Instagram: https://instagram.com/cafedevn
    Twitter: https://twitter.com/CafedeVn
    Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
    */
    
    // setup instanceOf check that assumes that
    // anything with canEat property is an animal
    class Animal {
      static [Symbol.hasInstance](obj) {
        if (obj.canEat) return true;
      }
    }
    
    let obj = { canEat: true };
    
    alert(obj instanceof Animal); // true: Animal[Symbol.hasInstance](obj) is called
    6thực sự mạnh hơn thế nhiều. Chúng ta có thể sử dụng nó như một phần mở rộng
    /*
    Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
    @author cafedevn
    Contact: 
    Fanpage: https://www.facebook.com/cafedevn
    Instagram: https://instagram.com/cafedevn
    Twitter: https://twitter.com/CafedeVn
    Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
    */
    
    // setup instanceOf check that assumes that
    // anything with canEat property is an animal
    class Animal {
      static [Symbol.hasInstance](obj) {
        if (obj.canEat) return true;
      }
    }
    
    let obj = { canEat: true };
    
    alert(obj instanceof Animal); // true: Animal[Symbol.hasInstance](obj) is called
    8và thay thế cho
    class Rabbit {}
    let rabbit = new Rabbit();
    
    // is it an object of Rabbit class?
    alert( rabbit instanceof Rabbit ); // true
    3.
  • Nghe khá lạ? Thật. Hãy làm sáng tỏ.
  • Theo đặc tả, tích hợp
    /*
    Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
    @author cafedevn
    Contact: 
    Fanpage: https://www.facebook.com/cafedevn
    Instagram: https://instagram.com/cafedevn
    Twitter: https://twitter.com/CafedeVn
    Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
    */
    
    // setup instanceOf check that assumes that
    // anything with canEat property is an animal
    class Animal {
      static [Symbol.hasInstance](obj) {
        if (obj.canEat) return true;
      }
    }
    
    let obj = { canEat: true };
    
    alert(obj instanceof Animal); // true: Animal[Symbol.hasInstance](obj) is called
    6có thể được trích xuất từ ​​đối tượng và được thực thi trong ngữ cảnh của bất kỳ giá trị nào khác. Và kết quả của nó phụ thuộc vào giá trị đó.
  • Đối với một số, nó sẽ là
    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 reached the end of the chain, return false
    1
  • Đối với một boolean, nó sẽ là
    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 reached the end of the chain, return false
    2
  • Dành cho
    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 reached the end of the chain, return false
    3:
    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 reached the end of the chain, return false
    4

Dành cho

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 reached the end of the chain, return false
5:
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 reached the end of the chain, return false
6

Đối với mảng:
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 reached the end of the chain, return false
7