重看前面的例子: 明明是个函数, 怎么就成了对象?
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