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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM