判断是否是数组的全部方法

首先说明,这个题非常考验你对原型链的认识程度

实验的两个对象:obj1=[1];obj2={name:"jack"}

第一种方法:使用Object.getPrototypeOf函数

console.log(Object.getPrototypeOf(obj1)==Array.prototype,
Object.getPrototypeOf(obj2)==Array.prototype)
返回 true和false

第二种方法:使用father.isPrototypeOf(child)函数

console.log(Array.prototype.isPrototypeOf(obj1))
console.log(Array.prototype.isPrototypeOf(obj2))
 返回 true和false 
  


第三种方法:使用obj.constructor

console.log(obj1.constructor==Array)
console.log(obj2.constructor==Array)
 返回 true和false 
  


第四种方法:使用instanceof

console.log(obj1 instanceof Array)
console.log(obj2 instanceof Array)
 返回 true和false 
  


问题是如果obj2._proto_=obj1;那么以上方法将失效,比如

console.log(obj2 instanceof Array)将返回true

最稳妥的两种办法如下:

1、调用Object.prototype.toString.call(obj2),首先Object的toString()方法会返回对象的类型[object Object],但是数组的原型改写toString(),在原型链里面,遮盖住了object原本的toString(),所以必须在object的原型上,把对象this改成array类型

2、使用Array.isArry(obj)方法,但这是ES5的新增函数

你可能感兴趣的:(JS随笔)