2016-02-29 75 views
0

为了向作为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); 

该解决方案的工作,但对我来说,看起来有点起伏。还有其他建议吗?

回答

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); 
使用