2011-03-14 135 views
0

使用函數的arguments屬性的正確方法是什麼? 這是我多麼目前使用它,但我敢肯定我沒有正確使用它:JavaScript中arguments屬性的最佳用法?

首先,我定義我的參數:

parameters = {}; 
parameters.ID = $tr.data('ID'); 
parameters.Name = 'Name goes here'; 
parameters.td = $td; 
UpdateName(parameters); 

而且在功能:

var UpdateName = function(){ 
    var local = {}; 
    local.ID = arguments[0].ID; 
    local.Name = arguments[0].Name; 
    local.td = arguments[0].td; 

    local.jqXHR = $.ajax('Remote/Ajax.cfc', { 
     data: { 
      method:'UpdateName' 
      ,returnformat:'json' 
      ,ID:local.ID 
      ,Name:local.Name 
     } 
    }); 
    local.jqXHR.success(function(result){ 
     if (result.MSG == '') { 
      local.td.text(local.Name).addClass('success'); 
     } else { 
      local.td.addClass('err'); 
     }; 
    }); 
    local.jqXHR.error(function(result){ 
     local.td.addClass('err'); 
    }); 
} 
+0

如果ajax調用非常快速完成,則可能不會定義成功和錯誤功能。最好將它們定義爲傳遞給'$ .ajax'的設置對象的一部分。 – 2011-03-14 18:54:20

+0

你有什麼理由以這種方式調用函數? – 2011-03-14 18:55:23

+0

我想弄清楚JavaScript的語法。 – 2011-03-14 19:55:41

回答

1

JavaScript functions能夠使用命名參數。

在你的情況,這可以簡化您的代碼如下:

var UpdateName = function(local) { 
    $.ajax('Remote/Ajax.cfc', { 
     data: { 
      method:'UpdateName', 
      returnformat:'json', 
      ID:local.ID, 
      Name:local.Name, 
      success: function(result) { 
       if (result.MSG == '') { 
        local.td.text(local.Name).addClass('success'); 
       } else { 
        local.td.addClass('err'); 
       } 
      }, 
      error: function(result) { 
       local.td.addClass('err'); 
      } 
     } 
    }); 
} 

我修改了代碼,這樣你就不需要保留到jqXHR參考了,因爲你沒有做任何事的無論如何。我還將主要逗號移至每行的結尾,但這只是一種偏好。

+0

感謝您清理我的代碼。我養成了首先由於SQL Server這樣做而引入逗號的習慣,但是從現在開始,當涉及到js代碼時,我會改變我的習慣。 – 2011-03-14 19:30:34

+0

真的,我想使用的是函數(參數)而不是functon(local),因爲它與我習慣的其他語言相似,但「參數」這個詞是我不能使用的關鍵字。 – 2011-03-14 19:35:37

+2

如果你真的想要,你可以在技術上使用'function(arguments)',但我不會推薦它。儘管它有一個特殊的用途,但'arguments'似乎不是[保留字](https://developer.mozilla.org/en/JavaScript/Reference/Reserved_Words),所以您可以像看到的那樣重新定義它適合。參見[http://jsfiddle.net/yxWZS/](http://jsfiddle。net/yxWZS /)爲例。 – 2011-03-14 20:22:54

3

你在技術上正確地使用它,但我沒有看到你的代碼中的實際點。變量arguments包含傳遞給函數的參數的類數組對象。例如。

function test() { 
    alert(arguments[0]); 
    alert(arguments[1]); 
} 
test("Hello", 123); // alerts Hello and 123 

在你的榜樣,而不是一個對象,你可以通過屬性作爲參數,並從arguments檢索它們。

5

arguments對象對於接受任意/未知數量參數的函數最有用。該MDC給出this example創建任何長度的HTML列表:

function list(type) { 
    var result = "<" + type + "l>"; 

    // iterate through non-type arguments 
    for (var i = 1; i < arguments.length; i++) 
    result += "<li>" + arguments[i] + "</li>"; 

    result += "</" + type + "l>"; // end list 

    return result; 
} 

...這可以這樣使用:

var listHTML = list("u", "One", "Two", "Three"); 
// listHTML is "<ul><li>One</li><li>Two</li><li>Three</li></ul>" 

因爲arguments,我們可以通過任意數量的項目,以list和它只是工作。 (請注意,即使在這種情況下,已知參數,type,被命名的arguments迭代開始其第二個元素。)

你的參數列表被明確定義,所以沒有理由不只是名稱的參數你的函數聲明。原樣使用arguments是不必要的,也很難閱讀。