深色模式
判断数组方法
假设 var arr = []
, 有如下方法
js
// 常规方法, ES6新增
1. Array.isArray(arr)
// 跨原型链调用 toString
2. Object.prototype.toString.call(arr).split(' ')[1].split(']')[0] === 'Array'
// 构造函数
3. arr instanceof Array
// 原型链, 检查Array 是否在 arr 的原型链上
4. Array.prototype.isPrototypeOf(arr)
5. arr.__proto__ === Array.prototype
isPrototypeOf
检查 某个对象是否在另一个对象的原型链上面。 下面是 MDN 的解释 MDN isPrototypeOf
Object.prototype.isPrototypeOf()
isPrototypeOf() 方法用于测试一个对象是否存在于另一个对象的原型链上。
TIP
isPrototypeOf() 与 instanceof 运算符不同。在表达式 "object instanceof AFunction"中,object 的原型链是针对 AFunction.prototype 进行检查的,而不是针对 AFunction 本身。
示例如下:
js
function Foo() {}
function Bar() {}
Bar.prototype = Object.create(Foo.prototype);
const bar = new Bar();
console.log(Foo.prototype.isPrototypeOf(bar));
// Expected output: true
console.log(Bar.prototype.isPrototypeOf(bar));
// Expected output: true