为什么以及何时应该在ember.js中使用argument.length

时间:2013-09-30 16:43:59

标签: javascript jquery ember.js

以下代码取自here。但是我不明白,为什么当作者使用fullName作为计算属性时,他使用arguments.length代替value.length检查了setter,这可能与value更相关分配给函数的变量。我想知道有什么区别以及为什么他在这种情况下使用arguments.length

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

1 个答案:

答案 0 :(得分:2)

if子句确保调用者已传递该值。

检查arguments的长度是正确的方法,即使您可能会遇到类似if (value)if (value !== undefined)之类的内容或类似不太谨慎的代码。检查arguments.length区分被调用的函数只有一个参数(作为getter)和两个参数(作为setter),第二个参数为undefined