Quiero componer varios objetos en uno. La palabra clave super debe llamar al método de objeto principal correspondiente. Si el método principal no está presente, debe llamar al siguiente método principal y así sucesivamente.
Código de ejemplo que arroja:
var base = { runBusinessLogic() { console.log('BASE'); } } var concrete = { unrelatedExtraMethod() { } } var addon = { runBusinessLogic() { super.runBusinessLogic(); // I expect this super call to call base.runBusinessLogic(..) console.log('ADDON'); } } var layer2 = Object.setPrototypeOf(concrete, base); var layer3 = Object.create(layer2, addon); layer3.runBusinessLogic(); // throws "TypeError: layer3.runBusinessLogic is not a function" Espero que layer3.runBusinessLogic(..) llame a base.runBusinessLogic(..) y aún tenga un ExtraMethod unrelatedExtraMethod que se pueda llamar en sí mismo.
¿Cómo hacer que la palabra clave super funcione como se indica?
var base = { runBusinessLogic() { console.log('BASE'); } } var concrete = { unrelatedExtraMethod() { } } var addon = { runBusinessLogic() { super.runBusinessLogic(); // I expect this super call to call base.runBusinessLogic(..) console.log('ADDON'); } } var layer2 = Object.setPrototypeOf(concrete, base); var layer3 = Object.setPrototypeOf(addon, layer2); // change this layer3.runBusinessLogic()