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



用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>