码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2017-05-20 11:23:25      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:返回值   script   style   基于   语句   data-   bool   top   this   



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

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

标签:返回值   script   style   基于   语句   data-   bool   top   this   

原文地址:http://www.cnblogs.com/tlnshuju/p/6881446.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!