理顺 JavaScript (14) - constructor 与 instanceof
理顺 JavaScript (14) - constructor 与 instanceof
涂孟超 发表于3年前
理顺 JavaScript (14) - constructor 与 instanceof
  • 发表于 3年前
  • 阅读 2
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   


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

 
 
 
 
 

 

 

  

共有 人打赏支持
粉丝 13
博文 2004
码字总数 14107
×
涂孟超
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: