zoukankan      html  css  js  c++  java
  • 理顺 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
    

  • 相关阅读:
    mysql日期加减
    cron 配置计划任务的书写格式(quartz 时间配置)
    空值排序问题
    update 表名 set 字段=值,数据更新
    insert into 数据插入
    SQL里面的char类型
    SQL使用代码创建数据完整性,约束
    SQL制表
    sql创建数据库
    验证码
  • 原文地址:https://www.cnblogs.com/del/p/1402561.html
Copyright © 2011-2022 走看看