识别哪些对象是JavaScript中的复杂对象,并找出哪些对象是数组,这有点像hacky 的解决方案。幸运的是,它设法在以下两种情况下工作:
Object.prototype.toString.call([]); // [object Array]
Object.prototype.toString.call(new Array()); // [object Array]
太好了,[object Object]
看不到!可悲的是,这种方法仍然失败了:
var arr = Object.create(Array.prototype);
Object.prototype.toString.call(arr); // [object Object]
这令人沮丧,所以至少可以这么说。我的arr
对象具有数组的所有方法,它的功能类似于数组,并且出于所有目的,它是一个数组。然而 JavaScript 并没有提供工具来识别它。
有什么方法可以判断一个对象是否继承自一个特定的原型?我想你可以像这样遍历原型:
function inherits(obj, proto) {
while (obj != null) {
if (obj == proto) return true;
obj = Object.getPrototypeOf(obj);
}
return false;
}
inherits(Object.create(Array.prototype), Array.prototype); // true
但感觉有点hacky。有没有更清洁的方法?