熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

JavaScript:new 一個函數和直接調用函數的區別分析

2013-11-15 12:03:32  來源: JSP教程 
或許許多人對此不以為然在函數前加 new 關鍵字不就是實例化一個對象嗎?但事情顯然沒那麼簡單   復制代碼 代碼如下:
function Test() {
thisname = Test;
return function() { return true; }
}

  
var test = new Test(); // 這裡的 test 是什麼?
是一個 Test 對象嗎?錯!這裡 test 是一個函數——Test 中返回的 function() { return true; }這時new Test() 等效於 Test()注意是等效於不是等於如果使用new Test() == Test() 判定兩者是否相等則會返回 false因為 Javascript  對於 Object 和 Function 的比較是基於引用的
為了更清晰的分辨在上述情形下兩者間的區別請繼續看以下代碼

復制代碼 代碼如下:
function Test() {
thisname = Test;
return Test;
}
var fnT = Test();
var newT = new Test();

  
顯然fnT 是字符串 Test那 newT 呢?呵呵是不是被第一個樣例迷惑了?其實此時 newT 是一個 Test 對象——有一個名為 name 的屬性其值為字符串 Test
通過上面兩段代碼我們可以得出一個猜測如果函數返回值為常規意義上的值類型(NumberStringBoolean)時new 函數將會返回一個該函數的實例對象而如果函數返回一個引用類型(ObjectArrayFunction)則 new 函數與直接調用函數產生的結果等同通過在 Test 函數中返回不同類型的值進行測試可以證實這一點  
分清這一點其實還是蠻重要的至少在看一些面向對象的框架類庫代碼時會少一些疑惑


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20188.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.