继承对象的最佳实践

时间:2016-02-29 09:57:07

标签: javascript json node.js express

我需要一个最佳实践建议,以便为作为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);

这个解决方案有效但对我来说看起来有点松了一口气。还有其他建议吗?

1 个答案:

答案 0 :(得分:3)

"适当" ES6解决方案是将Object.assignObject.create

结合使用
var session = Object.assign(Object.create(baseSession), {
   "id": "",
   "steps": […]
});

当然,您也可以使用自己的复制方法代替Object.assign

最后,有Object.setPrototypeOf,可以像

一样使用
var session = Object.setPrototypeOf({
   "id": "",
   "steps": […]
}, baseSession);