0

以下のコードはhereから取得されます。しかし、作成者が計算されたプロパティとして fullName を使用するときに、関数に割り当てられた変数に関連している可能性があるarguments.lengthの代わりに、セッターのチェックを行った理由がわかりません。この場合、違いは何ですか、なぜ彼はarguments.lengthを使用しているのでしょうか?value.lengthvalue

App.Person = Ember.Object.extend({
  firstName: null,
  lastName: null,

  fullName: function(key, value) {
    // setter
    if (arguments.length > 1) {
      var nameParts = value.split(/\s+/);
      this.set('firstName', nameParts[0]);
      this.set('lastName',  nameParts[1]);
    }

    // getter
    return this.get('firstName') + ' ' + this.get('lastName');
  }.property('firstName', 'lastName')
});


var captainAmerica = App.Person.create();
captainAmerica.set('fullName', "William Burnside");
captainAmerica.get('firstName'); // William
captainAmerica.get('lastName'); // Burnside
4

1 に答える 1

2

if 句は、呼び出し元から値が渡されたことを確認します。

のようなargumentsものに遭遇するかもしれませんが、長さをチェックすることは正しい方法です。チェックでは、1 つの引数 (ゲッターとして) のみで呼び出された関数と、2 番目の引数が である 2 つの引数 (セッターとして) で呼び出された関数を区別します。if (value)if (value !== undefined)arguments.lengthundefined

于 2013-09-30T16:50:51.570 に答える