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

 
 
 
 
 

 

 

  

转载于:https://my.oschina.net/hermer/blog/320599

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值