js new一个函数和直接调用函数的区别

时间:2022-09-29 16:29:28


用new和调用一个函数的区别:如果函数返回值是一个值类型(Number、String、Boolen)时,new函数将会返回这个函数的实例对象,而如果这个函数的返回值是一个引用类型(Object、Array、Funtion)时,new函数和直接调用函数的结果相同。测试代码如下:
<script type="text/javascript">     /*//工厂模式     function Person(name,age)     {         var o = new Object();         o.name = name;         o.age = age;         o.getName = function()         {             alert(this.name);         }         return o;     }     var obj1 = new Person("liwen",25);     var obj2 = Person("liwen1",25);     obj1.getName();  //liwen*/        new一个函数的实例对象     obj2.getName();  //liwen1*/      直接调用

这里new一个函数的对象和直接调用函数产生的结果相同,都可以弹出这个函数的name属性。注意这里函数的返回值是一个Funtion对象
    /*如果一个函数中存在return语句,调用这个函数的时候使用new和不使用new返回的结果是一样的吗?*/     function Test()     {         this.name = 'test';         return function()         {             return true;         }     }     //var test = new Test();   //function(){return true;}      它是Object     //var test = Test();       //function(){return true;}      它是Function     //alert(new Test() == Test());   //false     这就奇怪了,两都明明是一样的,都是函数,怎么不相同的,因为js对于Object和Funtion的比较是基于引用的。
    //为了进一步分辨上述情形下两者间的区别,再继续看以下代码     function Test()     {         this.name = "test";         return "test";     }     var test1 = new Test();   //Object 对象,它有一个name 属性,并且返回一个字符串test     var test2 = Test();    //test    ,它单纯是一个字符串
    /*通过上面的代码,可以得出一个猜测:如果函数返回值为常规意义上的数值类型(Number、String、Boolean)时,new函数将会返回一个该函数的实例对象,而如果函数返回一个引用类型(Object、Array、Function)时,则new函数与直接调用函数产生的结果相同*/
</script> 网上看的:用new和调用一个函数的区别:如果函数返回值是一个值类型(Number、String、Boolen)时,new函数将会返回这个函数的实例对象,而如果这个函数的返回值是一个引用类型(Object、Array、Funtion)时,new函数和直接调用函数的结果相同。测试代码如下:
<script type="text/javascript">    /*//工厂模式    function Person(name,age)    {        var o = new Object();        o.name = name;        o.age = age;        o.getName = function()        {            alert(this.name);        }        return o;    }    var obj1 = new Person("liwen",25);    var obj2 = Person("liwen1",25);    obj1.getName();  //liwen*/        new一个函数的实例对象    obj2.getName();  //liwen1*/      直接调用

这里new一个函数的对象和直接调用函数产生的结果相同,都可以弹出这个函数的name属性。注意这里函数的返回值是一个Funtion对象
    /*如果一个函数中存在return语句,调用这个函数的时候使用new和不使用new返回的结果是一样的吗?*/    function Test()    {        this.name = 'test';        return function()        {            return true;        }    }    //var test = new Test();   //function(){return true;}      它是Object    //var test = Test();       //function(){return true;}      它是Function    //alert(new Test() == Test());   //false     这就奇怪了,两都明明是一样的,都是函数,怎么不相同的,因为js对于Object和Funtion的比较是基于引用的。
    //为了进一步分辨上述情形下两者间的区别,再继续看以下代码    function Test()    {        this.name = "test";        return "test";    }    var test1 = new Test();   //Object 对象,它有一个name 属性,并且返回一个字符串test    var test2 = Test();    //test    ,它单纯是一个字符串
    /*通过上面的代码,可以得出一个猜测:如果函数返回值为常规意义上的数值类型(Number、String、Boolean)时,new函数将会返回一个该函数的实例对象,而如果函数返回一个引用类型(Object、Array、Function)时,则new函数与直接调用函数产生的结果相同*/
</script>