我有以下代码,我期待[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
??
答案 0 :(得分:0)
因为链接方法需要返回一些东西。所以,在你的代码中你正确地返回foo然后它被调用。
答案 1 :(得分:0)
第一个不起作用,因为“foo”方法不是void,所以它期望返回值。如果没有返回值,则对方法的调用将失败。我建议你跟踪开发人员工具中的两个调用,每个调用断点并逐步跟踪事件链。
关于你的第二个问题,目的很简单,给foo额外的功能。通常你不会使用嵌套的foo,这是一个不好的做法,但是原型。与帐户方法一样。它包含名字,姓氏和帐号,然后创建方法的原型,以便为特定帐户创建提款和存款方法。
它与在C#或JAVA中使用多态对象几乎完全相同。相反,使用覆盖,你使用原型,或者在上面的代码的情况下,嵌套“foo”。
答案 2 :(得分:0)
在您的代码中,您将函数分配给变量而不是正常分配。变量名可以被函数内部的代码用来引用函数本身,但函数外部的代码根本看不到它。
当您调用 foo()。baz(); 之类的函数时 它将首先调用 foo()函数,并且需要一个返回值(在本例中是一个函数referer变量)。然后根据引用变量名称,它将调用 foo()中的 baz()。因此,要在foo()中调用函数baz(),首先需要访问函数。