内置构造函数

作者: FF_C | 来源:发表于2017-12-01 19:39 被阅读0次

    复习

    var xiaoming = new People();
    //此时:
    xiaoming._proto_===People.prototype
    

    系统内置很多的构造函数,他们也叫做我们的基本类型值,也叫做 引用类型值的"包装类"。

    1 ,系统内置了Object函数,可以直接new它,返回一个空对象.然后可以给这个空对象添加属性

    var obj = new Object();
    cosole.log(obj); //Object{}
    obj.a=1;
    obj.b = 2;
    console.log(obj);//Object{a:1,b:2}
    

    也就是说

    var obj = new Object();
    obj.a=1;
    obj.b = 2;
    等价于
    var obj ={
      "a":1,
      "b":2
    }
    

    所以,我们得出结论,任何一个JSON的proto都是Object.prototype
    //字面量也是new Object()new出来的

    var obj ={
      "a":1,
      "b":2
    }
    alert(obj._proto_===Object.prototype);  //true
    

    工作中,我们一般写字面量,不写var obj = new Object().即使我们需要一个空对象 ,我们也喜欢:
    var obj ={};

    Object.prototype是所有对象的原型链终点

    var obj = new Object();
    cosole.log(obj); //Object{}
    obj.a=1;
    obj.b = 2;
    console.log(obj);//Object{a:1,b:2}
    

    2.Function函数
    系统内置了一个Function的构造函数,用于构造函数。事实上,所有的function字面量都是它的实例
    //定义函数的字面量方法

    //function sum(a,b){
    //  alert(a+b);
    //}
    //sum(43,5);
    
    //创建一个sum函数 ,用构造函数构造一个函数
    var sum = new Function("a","b","alert(a+b";);
    //alert(typeof sum) //function
    sum(4,5)  //9
    

    在new Function的时候 ,先罗列所有的形参列表,最后一个参数是函数里面的语句,注意,参数都是字符串!!实战中,不可能用这种方法new函数

    任何函数,都是Function实例

    function add(a+b){
      alert(a+b);
    }
    alert(add._proto_===Function.prototype); //true
    
    

    任何函数都是Function的实例,Object也是Function的实例,Function自己也是自己的实例!

    alert(Object._proto_===Function.prototype);//true
    
    Function._proto_===Object.prototype  //false
    Function._proto_._proto_==Object._proto_._proto__ //true
    

    Array函数
    Array是系统内置的数组构造函数,用于构造数组

    var arr = new Array();
    arr[0] = 324;
    arr [1] =435;
    console.log(arr) //[324,435]
    //等价于
    
    var arr = [324,435];
    
    

    有一个坑,就是里面能够写参数 ,表示数组的长度,但是数组还是空数组,每一个项不是undefined.

    var arr = new Array(5);
    console.log(arr);  //[]
    console.log(arr.length); //5
    console.log(arr[0])  //undefined
    
    var arr =[];
    alert(arr[3456464]); //undefined
    
    
    
    var arr = new Array(5);//这里的5表示数组默认5项,但是没有任何约束力
    console.log(arr.length); //5
    等价于
    var arr =[];
    arr.length = 5;
    console.log(arr.length);  //5
    
    

    //此时这个5没有用,还是可以添加第6项第七项等等

    arr[6] ="hello"
    
    

    有一个题目和它有关系:写一个函数,接受两个参数:数字n和字符串str,函数返回重复n次的str,用一句话来实现
    屌丝程序员:

    function repeat(n,str){
      var result = "";
      for(var i =0;i<n;i++){
         result+=str;
      }
      return result; 
    }
    alert(repeat(3,"你好"))//你好你好你好
    

    大神:

    function repeat(n,str){
      return(new Array(n+1).join(str));
    }
    alert(repeat(3,"你好"))//你好你好你好
    

    解释

    ["东风","大本","喝酒"].join("你好")
    //"东风你好大本你好喝酒"
    
    ["","",""].join("你好")
    //"你好你好"
    
    [,,].join("你好")
    //"你好"
    (new Array(3)).join("你好")
    //"你好你好"
    

    所以创建一个长度是n+1的数组,里面的空挡就有n个。此时用str链接,就行了。
    任何数组字面量,都是Array的实例

    var arr =[324,324,5,66];
    console.log(arr._proto_==Array.prototype); //true
    console.log(arr._proto_.proto_===Object.prototype);//true
    

    4 RegEXP函数
    任何一个正则表达式,都是RegExp函数的实例

    var reg=/\d/g;
    等价于
    var reg= new RegEXP("\\d","g");
    var str="你好啊123"
    str = str.replace(reg,"A");
    alert(str); //你好啊AAA
    

    注意:这是把字符串变为正则对象的方法,怎么用,我们后面NodeJs有一个案例用到这个,实时搜索。

    相关文章

      网友评论

        本文标题:内置构造函数

        本文链接:https://www.haomeiwen.com/subject/ijvwbxtx.html