理顺 JavaScript (14) - constructor 与 instanceof
重看前面的例子: 明明是个函数, 怎么就成了对象?
function MyObj(a, b) { this.x = a; this.y = b; } var obj = new MyObj(11, 22); alert(obj.x); //11 alert(obj.y); //22 alert(typeof obj); //object //一个对象的建立要通过构造函数, 有了构造函数就不难成为对象; //用 new 关键字调用函数, JavaScript 就会建立一个对象, 并把该函数当作对象的构造函数. //这就像 String 类的构造函数是 String()、Array 类的建立函数是 Array() ...
每个类的构造函数的名称肯定不一样, 但可以用 constructor 泛指它们
var str = new String(); alert(str.constructor); /* 将会输出如下: function String() { [native code] } 不过它没给我们看到具体的实现代码, 只有自定义的才会看到 */ var arr = new Array(); alert(arr.constructor); /* 将会输出如下: function Array() { [native code] } */ function MyObj(a, b) { this.x = a; this.y = b; } var obj = new MyObj(11, 22); alert(obj.constructor); /* 将会输出如下: function MyObj(a, b) { this.x = a; this.y = b; } */
判断一个对象所属的类(方法一)
//通过上面手段, 可以判断一个对象到底是属于哪一个类 var str, arr, s; str = new String(); alert(str.constructor == String); //true arr = new Array(); alert(arr.constructor == Array); //true /* 但这会有个问题, 譬如一个不是对象的字符串也会返回 true */ s = 'ABC'; alert(s.constructor == String); //true //解决这个问题当然可以再加条件, 但不如直接用下一个方法
判断一个对象所属的类(方法二: 使用 instanceof 关键字)
var str, arr, str; str = new String(); alert(str instanceof String); //true arr = new Array(); alert(arr instanceof Array); //true str = 'ABC'; alert(str instanceof String); //false /* 但这也会有个问题, 因为 Object 是所有类的祖先 ... */ str = new String(); alert(str instanceof Object); //true