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
    

  • 相关阅读:
    json&display
    postgresql AutoVacuum系统自动清理进程
    postgresql vacuum操作
    C++ 在.h文件中包含头文件和在.cpp文件中包含头文件有什么区别
    ResetEvent、CreateEvent、SetEvent
    《转载》C语言的移位操作符
    《转载》如何使用M6117D看门狗定时器复位系统
    《转载》 Bit,Byte,WORD,DWORD区别和联系
    $.messager.alert
    对一个或多个实体的验证失败
  • 原文地址:https://www.cnblogs.com/del/p/1402561.html
Copyright © 2011-2022 走看看