【问题标题】:Using object names as parameter names使用对象名称作为参数名称
【发布时间】:2014-05-02 09:36:33
【问题描述】:

在 javaScript 中,我创建如下所示的对象。当我将对象解析为函数时,我通常在对象之后命名参数。 [见下面的例子]。我的理由是,如果另一个开发人员出现并查看一个他们立即知道该函数需要 fooObj、barObj 和 laaObj 的函数。问题是:是否有任何可能与此相关的语法/性能问题。 (例如,某些浏览器会遇到参数名称与对象/“函数”同名的问题)。

function exampleObj(name, date, wine, cheese) {
    this.name = name;
    this.date = new Date(date);
    this.wine = wine;
    this.cheese = cheese;

    this.drink = function() {
        open(this.wine);
        pour(this.wine);
        consume(this.wine);
    }

    this.eat = function() {
        unwrap(this.cheese);
        getCrackers();
        informGromitOfCheese(this.cheese);
        consume(this.cheese);

    }
}

var example1 = new exampleObj("Foo", "02/05/2014", "Merlot", "Stinky Bishop");

当我将对象传递给函数时:

// Pass the exampleObj here. Param name == Function name
function foo(exampleObj) { // <-- Is this okay?
    alert(exampleObj.name);
}

foo(example1);

【问题讨论】:

  • @PaulS。我想他想知道参数名称是否可以与任何其他函数相同。他实际上是通过example1
  • @thefourtheye 是的,我的“对象”基本上是我存储的函数。
  • @User2 你的用户名真的很酷,顺便说一句。
  • 您可以按照您的说明进行操作,但是您正在遮蔽您的 exampleObj 构造函数,这意味着您可能没有可用的引用,因此无法构造或检查 instanceoffoo 里面很容易。
  • @Edward Flattery -> 获得 +1 的最佳方式。

标签: javascript function object parameter-passing


【解决方案1】:

是的,您可以使用与参数相同的名称。但是我们通常使用 Pascal(Upper Camel Case) 来命名类,如 DateArray.... 所以你可以将类命名为 ExampleObj 并将实例命名为 exampleObj 以避免混淆。

【讨论】:

  • 这是迄今为止最有帮助的回应。谢谢。将研究骆驼风格。
  • ...天哪!不要在工作中搜索“骆驼风格”。正确的措辞是 CamelCase。这是WIKI
  • 哈哈。这样更好。另一句话让我在老板面前脸红了。啊啊啊周五早上。
  • 对不起,应该是Upper Camel Case,也叫Pascal。
【解决方案2】:

对不起,我之前发布的答案可能具有误导性,请看看这个小提琴,看看你是否能理解发生了什么..

http://jsfiddle.net/h_awk/8W92c/

function foo(name, age)
{
    this.name = name;
    this.age = age;

    this.getDetail = function()
    {
        alert('Name is: ' + this.name + ' age is: ' + this.age);
    }
}

function bar(foo)
{
    alert(foo.name);
}

bar(new foo('hawk', '24') );

你将构造函数传递给函数 bar,然后当你调用 bar 时,你实例化 foo,它可以以不同的方式完成。ie.var person = new foo('hawk', 24) 然后将 person 作为参数传递。 bar(person) 仍然得到相同的结果。 foo 的 this 值是指函数 foo 因此给你预期的结果,我很抱歉,我希望这会有所帮助.. :)

【讨论】:

  • 我之前的评论弄错了;它只是一个名称,因为它是声明
  • " 因为你不知道不同的 Javascript 引擎会如何解释它 " - 我很想知道。在被 javaScript 引擎表现不同之前,我已经被咬到了底部。
  • IE 和 Chrome 对事物的解释不同。 IE 有不同的关键字,例如 attachEvent,而 Chrome 有 addEventHandler。您可以对浏览器兼容性进行一些研究,我不是 Javascript 引擎方面的专家。 :)