理顺 JavaScript (14) - constructor 与 instanceof

   理顺 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


上一篇:不懂就看!P7大牛珍藏的Java反射详解笔记,从入门到实践太香了


下一篇:记一次Java反射以及演示在设置暴力反射权限后,如何获取和设置给指定私有的属性赋值