1. instanceof 操作符
(1). instanceof 操作符可以用來判斷指定的構造函數原型是否在指定對象的原型鏈中。
- 語法:object instanceof constructor
如:function Animal(name) {
this.name = name;
};
let cat = new Animal('cat');
console.log(cat instanceof Animal); // true
- 在類中同樣適用
如:class Animal {
constructor(name){
this.name = name;}
};
let cat = new Animal('cat');
console.log(cat instanceof Animal);// true
- 在繼承關係中同樣適用
如:class Cat extends Animal {
constructor(name,age){
super(name);
this.age = age; }
};
let cat = new Cat ('lulu', 3);
console.log(cat instanceof Cat); // true
console.log(cat instanceof Animal); // true
console.log(cat instanceof Object); // true
(2). 在ES6中,Symbol.hasInstance()函數與instanceof操作符的作用相似
如:class Animal {
constructor(name){
this.name = name;}
};
let cat = new Animal('lulu');
console.log(Animal[Symbol.hasInstance](cat)); // true
- Symbol.hasInstance可以在子類上被重定義
如:class Pen extends Animal {
constructor (name, brand) {
super(name);
this.brand= brand; };
static [Symbol.hasInstance]() { return false };
};
let pen = new Pen ('Bluebird', 'Cracker');
console.log(pen instanceof Pen); // false
console.log(pen instanceof Animal); // true
console.log(pen instanceof Object); // true