需求:判断一个对象为Array
就是这么一个简单的需求,说不上什么反射,呵呵。
在网上查了一下资料,解决办法如下:
可以判断它的构造器是什么,进而判断它是Array还是Object!
在js帮助中,Contructor解释如下:
constructor 属性
描述
表示创建对象的函数。
语法
object.constructor
必需的 object 参数是对象或函数的名称。
constructor 属性
描述
表示创建对象的函数。
语法
object.constructor
必需的 object 参数是对象或函数的名称。
说明
constructor 属性是所有具有 prototype 的对象的成员。它们包括除 Global 和 Math 对象以外的所有 JScript 固有对象。constructor 属性保存了对构造特定对象实例的函数的引用。 例如:
x = new String("Hi");
if (x.constructor == String)
// 进行处理(条件为真)
或
function MyFunc
{
// 函数体。
}
y = new MyFunc; 如果要求检测更详细一些,查看该属性的具体类型,可以用instanceof操作符: 上述代码执行的结果会认为原为Array类型的obj是一个Object,因为Array本身就是从Object继承而来,显然,将对Array的检测放在前面会得到更精确的结果。因此,使用instanceof来判断对象类型,需要注意当两个对象存在继承关系的时候,应该关注检测顺序的问题,进一步我们可以想到,JSON创建的对象不是Object就是Array,使用instanceof来检测JSON对象意义不大。
if (y.constructor == MyFunc)
// 进行处理(条件为真)
这里再引用flyingis的
if (obj instanceof PredefinedObj) {}
但是,当对obj对象进行条件检测的时候,如果多种条件的对象类型存在继承关系,则需要注意代码的书写顺序,例如:
function() ExamineType(obj)
}
这里再推荐一篇文章,希望大家能有点收获《AJAX的JavaScript的反射机制》《利用反射机制和prototype 实现继承》