理解一段简单的JS代码 - 功能 -

时间:2013-04-06 22:11:12

标签: javascript

我正在阅读JS Book的Ninja Secrets并看到这部分示例代码:

    var ninja = {
      chirp: function signal(n) {                              //#1
        return n > 1 ? signal(n - 1) + "-chirp" : "chirp";
      }
    };

    var samurai = { chirp: ninja.chirp }; 

   ninja = {}; 

所以我理解第一部分:我们有一个对象ninja,它有一个方法。

我理解第二部分,现在我们正在创建一个名为samurai的新对象,它有一个名为chirp的属性。

困扰我的部分是ninja.chirp部分,我们在这做什么?它是如何工作的?

3 个答案:

答案 0 :(得分:5)

它接受chirp对象(它是一个函数)的ninja属性的值,并将其赋值给正在构造的对象的chirp属性。

这是一个更简单的例子(使用字符串而不是函数):

var foo, bar;
foo = { "an": "object" };
bar = { "an": foo.an }
alert(foo.an);
alert(bar.an);

答案 1 :(得分:2)

我已经多次见过这个例子,这是一个可怕的例子。对于初学者来说,命名函数表达式在IE中是错误的,但除此之外它们完全没必要,因为你可以简单地引用arguments.callee

除此之外,使用递归函数重复字符串只是在寻找麻烦。整个事情可以简单得多:

function signal(n) {
    return new Array(n+1).join("-chirp").substr(1);
}

答案 2 :(得分:1)

在此处,chirp已将其复制到samurai。您可以销毁ninja对象,但仍然使用samurai.chirp方法。