以下代码取自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
答案 0 :(得分:2)
if子句确保调用者已传递该值。
检查arguments
的长度是正确的方法,即使您可能会遇到类似if (value)
或if (value !== undefined)
之类的内容或类似不太谨慎的代码。检查arguments.length
区分被调用的函数只有一个参数(作为getter)和两个参数(作为setter),第二个参数为undefined
。