Model的set和fill返回设置的值
Closed this issue · 5 comments
otakustay commented
返回个东西会死啊……
lylijincheng commented
setter 类型的方法返回当前的上下文 this
,方便 chainable。
另外 set
和 fill
是不是可以合成1个方法,比如:
model.set({
'key': 'value'
});
model.set('key', 'value');
otakustay commented
我记得以前在es-discuss上有一个关于这个的讨论,不过讨论的是Set.prototype.add
,类似吧
总得来说,有2种意见,第一种就是你说的,返回this
,那么好处是
set.add('a').add('b').add('c');
可以链式调用
另外一种意见,就是返回添加的东西,那么好处是
var foo = set.add({ x: 1 });
console.log(foo.x);
可以一行代码写完需要的逻辑,否则就需要这样
var foo = { x: 1 };
set.add(foo);
console.log(foo.x);
当时邮件里大家比较倾向于第2种即返回添加的值,原因是链式调用本身对debug的不友好性是不少人不想见到的,因此在两者都有适用场景的情况下,后者让更多人接受
当然最后Set.prototype.add
确实返回了this
……
说说我的考虑,主要是面对一个场景:
MyModel.prototype.datasource = {
entity: function (model) {
return ajax.get('user/' + model.get('id'))
.then(model.fill);
}
};
当model.fill
返回参数本身时,这个Model
实现了“将entity
里的属性全部作为Model
的属性,同时加一个叫entity
属性放整个对象”的功能,这在我们的业务中会经常用到。
而当model.fill
返回其它,比如this
时,我就必须这么写代码:
MyModel.prototype.datasource = {
entity: function (model) {
return ajax.get('user/' + model.get('id'))
.then(function (entity) {
model.fill(entity);
return entity;
});
}
};
相对来说“不那么美”,仅此而已
所以关于这个问题,我很想再多听一些人的意见,最后我们决定一个
leeight commented
从这两个例子来看,我倾向于第一个,明显要清晰很多
otakustay commented
还是按着ECMA的标准来,返回this
吧,希望以后这东西内部可以用Set
来实现
otakustay commented
又看了下,不大对。因为remove
原本的实现是返回移除的对象,那如果set
返回this
缺乏一致性,所以最终还是决定返回添加的那个对象了