我需要一个最佳实践建议,以便为作为json
对象接收的对象添加行为。
我有一个REST
服务,允许我定义一种状态机。
API定义了/sessions
个资源。通过POST /sessions/:id
创建会话时,我在控制器中获得了一个json
对象:
var session = {
"id": "",
"steps": [ ... ]
}
有了这个对象,我希望它继承一些行为:
var baseSession = {
"nextStep": function() {... },
"getCurrentStep": function() { ...}
}
所以我想做的是:
session.__proto__ = baseSession;
但使用__proto__
似乎无法做到。
另一种可能性是复制新对象中的每个属性:
function copyOwnProperyTo(origin, obj) {
Object.keys(origin).forEach(function(prop) {
obj[prop] = origin[prop];
});
}
var newSession = Object.create(baseSession);
copyOwnProperyTo(session, newSession);
这个解决方案有效但对我来说看起来有点松了一口气。还有其他建议吗?
答案 0 :(得分:3)
"适当" ES6解决方案是将Object.assign
与Object.create
:
var session = Object.assign(Object.create(baseSession), {
"id": "",
"steps": […]
});
当然,您也可以使用自己的复制方法代替Object.assign
。
最后,有Object.setPrototypeOf
,可以像
var session = Object.setPrototypeOf({
"id": "",
"steps": […]
}, baseSession);