我第一次使用合成而不是继承,我更喜欢它,但是我遇到的一个问题是如何着手组合需要公共和私有属性的对象。 例如,假设您要组成一个健康对象,该对象具有要公开的setHealth(value)方法,但是您还希望该对象中具有私有方法flagDeath(),该对象在要构造的对象之外不可访问。目前,我正在使用的解决方法是将对象都组合为状态(私有)对象和基础(公共)对象,状态对象通过闭包是私有的,而基础对象不是,我在下面进行了演示:
const createPlatform = (startX, startY, width, height, img) => {
frameList.push(this);
let state = { // Private properties
width,
height,
img,
pos: new Coords(startX, startY),
}
Object.assign(state, canDraw(state, 1), canCollide(state)); // Assign private functionality
let base = { // Public properties
frameDo: function () {
state.draw()
}
}
return Object.assign(base); // Assign public functionality
};