1.instanceof 运算符
2.constructor属性
3.构造函数的名字
构造函数是类的公共标识,但原型是类的唯一标识
一、instanceof运算符
var d = new Date();//通过Date()构造函数来创建一个新对象
d instanceof Date; //计算结果为true,d是由Date()创建的
d instanceof Object; //计算结果为true,所有的对象都是Object的实例
var a = [1,2,3]; //通过数组直接量的写法创建一个数组
a instanceof Array //计算结果为true,a是一个数组
a instanceof Object // 计算结果为true,所有的数组都是对象
a instanceof RegExp //计算结果为false,数组不是正则表达式
range.methods.isPrototypeof(r); //range.method 是原型对象
instanceof和isPrototypeOf()方法的缺点是,我们无法通过对象来获得类名,只能检测对象是否属于指定的类名。
二、constructor属性
因为构造函数是类的公共标识符,所以最直接的方法就是使用constructor属性,比如:
function typeAndValue(x){
if(x == null) return ""; //null 和 undefined没有构造函数
switch(x.constructor){
case Number: return "number:" + x;
case String: return "string:" + x;
case Date: return "Date:" + x;
case RegExp:return "RegExp:" + x;
case Complex:return "Complex:" + x;
}
}
需要注意的是,代码中关键字case后的表达式都是函数,如果改用typeof运算符获取到对象的class属性的话,它们应当改为字符串。
三、构造函数的名称