zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    SQL Server Management Studio
    uiimage拉伸
    时间空间复杂度
    冒泡选择排序

    插入排序
    快速构建APP
    TTTAtibutedlabel
    Git命令
    适配
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6881446.html
Copyright © 2011-2022 走看看