2.2.1 • Published 3 years ago

@mavega/oloo v2.2.1

Weekly downloads
17
License
MIT
Repository
github
Last release
3 years ago

LGD

Use OLOO pattern. Check out VSC extensions by LearnGameDevelopment to have syntax highlighting.

Why to use this module.

Objects Linked to Other Objects Article

Examples

Using Oloo.assign

const { setup } = require('@learngamedevelopment/oloo');
setup();

const Object1 = {
  create() {
    const object1 = Object.create(Object1);

    object1.var = 0;
    object1.var2 = 'hi';

    return object1;
  },

  virtualMethod() {
    console.log('Base Class!');
  }
}

const Object2 = {
  create() {
    const object2 = Oloo.assign(Object1.create(), Object2);
    return object2;
  },

  virtualMethod() {
    Oloo.base(this, this.virtualMethod);
    console.log('Inherited Class!');
  }
}

const object2Instance = Object2.create();
object2Instance.virtualMethod();
// Base Class!
// Inherited Class!

Using Oloo.assignSlow + Oloo.createSlow

const { setup } = require('@learngamedevelopment/oloo');
setup();

const Object1 = {
  create() {
    // must use createSlow in the first object of the chain.
    const object1 = Object.createSlow(Object1);

    object1.var = 0;
    object1.var2 = 'hi';

    return object1;
  },

  virtualMethod() {
    console.log('Base Class!');
  }
}

const Object2 = {
  create() {
    const object2 = Oloo.assignSlow(Object1.create(), Object2);
    return object2;
  },

  virtualMethod() {
    Oloo.base(this, this.virtualMethod);
    console.log('Inherited Class!');
  }
}

const object2Instance = Object2.create();
object2Instance.virtualMethod();
// Base Class!
// Inherited Class!

Release Notes

2.2.0+

  • Got rid of parent field on objects, we keep track of the parent throughout the life of the method call and then remove it.
    • In the past we use to inject parent into objects to know if we already called a method on the parent. Now we don't.
  • Improved error handling.

2.1.0+

  • Improved speed tremendously. Kept older assign as assignSlow for creating classes that don't get created often.
  • Added debugging capabilities.
    • If you add a displayName to your Obj we will make sure it appears in the Stack Trace.
    • Check to make sure displayName is a function name. Also consider compiling out displayName with Babel.