• JS面向对象组件(三)--面向对象中的常用属性和方法


    图片的由来看下面:

    1、hasOwnProperty:看是不是对象自身下面的属性

    var arr = [];
    arr.num = 10;
    Array.prototype.num2 = 20;    //所有的数组对象都有num2,并不只是arr自身的属性
    
    //alert(  arr.hasOwnProperty('num')  );  //true
    
    alert(  arr.hasOwnProperty('num2')  );  //false

    2、constructor: 查看对象的构造函数,每个原型都会自动生成它,避免修改它。

    function Aaa(){
    }
    
    var a1 = new Aaa();
    
    alert( a1.constructor );  //Aaa

    这是我们自定义对象,然后弹出来了Aaa。下面我们可以试试Array的。

    var arr = [];
    alert( arr.constructor);  //Array

    因此可以使用一种方式去判断是否是数组。arr.constructor == Array 为true,或者其他类型的也可以。

    而constructor是每个函数都有的,构造函数只会生成这个constructor。我们也可以通过 构造函数.prototype.construstor去修改它,当然最好少修改。

    function Aaa(){
    }
    //Aaa.prototype.constructor = Aaa;   //每一个函数都会有的,都是自动生成的
    Aaa.prototype.constructor = Array;
    var a1 = new Aaa();
    alert(a1.constructor)   //Array

    可想而知,constructor是在构造函数的原型下面,但是hasOwnProperty是在object原型下的

     function Aaa(){
     }
     var a1 = new Aaa();
     alert(a1.constructor == Aaa.prototype.constructor);   //true;
     alert(a1.hasOwnProperty == Object.prototype.hasOwnProperty);  //true

    3、instance:对象与构造函数在原型链上是否有关系

    function Aaa(){
    }
    
    var a1 = new Aaa();
    //alert( a1 instanceof Aaa);  //true
    //alert( a1 instanceof Object );  //true
    //alert( a1 instanceof Array );  //false
    
    
    var arr = [];
    alert( arr instanceof Array );   //true

    因此又有一种判断是否是数组的方法:arr instanceof Array

    4、toString

     咱先想想它究竟在哪儿?

    //toString() : 系统对象下面都是自带的(例如下面就在Array.prototype) , 自己写的对象都是通过原型链找object下面的(例如是是Object.prototype.toString)
    var arr = [];
    alert( arr.toString == Object.prototype.toString ); //false
    alert( arr.toString == Array.prototype.toString ); //true

    function Aaa(){
    }
    var a1 = new Aaa();
    alert( a1.toString == Object.prototype.toString ); //true
    alert( a1.toString == Array.prototype.toString ); //false

    既然知道它具体在哪儿了,那我们要改造它的方法自然是可以的。toString是将对象转成字符串,但是我们想换一种转换方式。

    /*var arr = [1,2,3];
    
    Array.prototype.toString = function(){
        return this.join('+');
    };
    
    alert( arr.toString() );  //'1+2+3'*/

    也可以用toString进制转换,例如toString(16)  转换成16进制的。

    接下来的重点来了,判断是否是数组的最好的方法:Object.prototype.toString.call(arr) == '[object Array]'

    /*var arr = [];
    
    alert( Object.prototype.toString.call(arr) == '[object Array]' ); */ //'[object Array]'
     var arr = {};
     alert( Object.prototype.toString.call(arr));   // object object
    
     var arr = new Date;
     alert( Object.prototype.toString.call(arr));   // object Date
    
     var arr = new RegExp();
     alert( Object.prototype.toString.call(arr));   // object RegExp
  • 相关阅读:
    ADO.NET朝花夕拾(二)
    使文本框自动适应内容的高度
    jQuery getJSON
    ASP.NET页面生命周期概述
    CSS学习(四)CSS选择符详解
    jQuery dialog 异步调用ashx,webservice数据
    jQuery之小议each()
    jQuery,Ashx发送站内信
    Newtonsoft.Json处理日期问题
    CSS学习(三)带当前标识的横向导航图片美化版
  • 原文地址:https://www.cnblogs.com/wanliyuan/p/5244931.html
Copyright © 2020-2023  润新知