返回相同的方法被调用

时间:2015-06-22 06:21:01

标签: javascript

我有以下代码,我期待[D但它无效

alert('baz')

但是,如果我var foo = function () { function foo() { alert('foo'); } foo.baz = function () { alert('baz'); } } foo().baz(); 在最后工作

return foo

为什么第一个不工作,为什么第二个工作,什么是目的内部var foo = function () { function foo() { alert('foo'); } foo.baz = function () { alert('baz'); } return foo; } foo().baz(); // output:baz ??

3 个答案:

答案 0 :(得分:0)

因为链接方法需要返回一些东西。所以,在你的代码中你正确地返回foo然后它被调用。

答案 1 :(得分:0)

第一个不起作用,因为“foo”方法不是void,所以它期望返回值。如果没有返回值,则对方法的调用将失败。我建议你跟踪开发人员工具中的两个调用,每个调用断点并逐步跟踪事件链。

关于你的第二个问题,目的很简单,给foo额外的功能。通常你不会使用嵌套的foo,这是一个不好的做法,但是原型。与帐户方法一样。它包含名字,姓氏和帐号,然后创建方法的原型,以便为特定帐户创建提款和存款方法。

它与在C#或JAVA中使用多态对象几乎完全相同。相反,使用覆盖,你使用原型,或者在上面的代码的情况下,嵌套“foo”。

答案 2 :(得分:0)

在您的代码中,您将函数分配给变量而不是正常分配。变量名可以被函数内部的代码用来引用函数本身,但函数外部的代码根本看不到它。

当您调用 foo()。baz(); 之类的函数时 它将首先调用 foo()函数,并且需要一个返回值(在本例中是一个函数referer变量)。然后根据引用变量名称,它将调用 foo()中的 baz()。因此,要在foo()中调用函数baz(),首先需要访问函数。