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>
  • 相关阅读:
    yii2美化url
    Android 百度地图API 定位 导航
    辛星浅谈PHP的混乱的编码风格
    html5非常火,他究竟与html4有何差别?
    Cocos2d-x 3.0心得(01)-图片载入与混合模式
    解读BOM与COM
    HDU 1718 Rank counting sort解法
    汉语转拼音pinyin4j
    UVALive-6656-Watching the Kangaroo(二分)
    thinPHP中多维数组的遍历
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6881446.html
Copyright © 2011-2022 走看看