4

私はJSブックの忍者の秘密を読んでいて、コード例のこの部分を見ています:

    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一部です。私たちはここで何をしているのですか? それはどのように機能していますか?

4

3 に答える 3

5

オブジェクト (関数)のchirpプロパティの値を取得し、それを構築中のオブジェクトのプロパティに割り当てます。ninjachirp

以下は、より単純な例です (関数の代わりに文字列を使用):

var foo, bar;
foo = { "an": "object" };
bar = { "an": foo.an }
alert(foo.an);
alert(bar.an);
于 2013-04-06T22:13:22.143 に答える
2

私はこの例を何度も見てきましたが、恐ろしい例です。まず、名前付き関数式は IE ではバグがありますが、それを除けば、単純に参照できるので完全に不要ですarguments.callee

それはさておき、再帰関数を使用して文字列を繰り返すことは、単に問題を引き起こしているだけです。全体をもっと簡単に作ることができます:

function signal(n) {
    return new Array(n+1).join("-chirp").substr(1);
}
于 2013-04-06T22:13:35.510 に答える
1

ここではchirp、 にコピーされていsamuraiます。ninjaオブジェクトを破棄してもsamurai.chirpメソッドを使用できます。

于 2013-04-06T22:18:24.177 に答える