2011-03-14 138 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是不必要的,也很难阅读。