Neck Protection Mandate

    flatten-prototypes

    4.0.0 • Public • Published

    flatten-prototypes

    Flatten out an objects prototypes into a single flat object

    Example

    var flattenPrototypes = require("flatten-prototypes");
     
    var foo = { hello: 'foo', deep: { one: true } }
    var bar = { woop: 'leep' }
    var baz = { world: 'baz', deep: { two: true } }
     
    foo.__proto__ = bar
    bar.__proto__ = baz
     
    var obj = flattenPrototypes(foo)
    obj.hello // foo
    obj.woop // leep
    obj.world // baz
    obj.deep // { one: true, two: true }
    Object.keys(obj); // ['hello', 'woop', 'world', 'deep']

    Docs

    flattenPrototypes(object) => object

    flattenPrototypes takes an object with a non trivial prototype chain and will return you a plain object with no prototypes which has all the properties of the original object and it's prototypes.

    This is like Object.getOwnPropertyNames except it get's all the property names not just it's "own" ones and then returns a new plain object with those properties where the values are either the value of the property or a deep merging of the values of the properties if multiple of the prototypes have the same key.

    Basically if you were using prototypes to share data across multiple objects and you wanted to be able to get a flat plain object of the current state you can call flattenPrototypes

    var Blueprint = {
        hands: 2,
        feet: 2,
        legs: 2,
        arms: 2
    }
     
    var Spider = {
        legs: 8,
        feet: 8,
        hands: 0,
        arms: 0
    }
    Spider.__proto__ = Blueprint
     
    var Dog = {
        arms: 0,
        feet: 4,
        legs: 4,
        hands: 0
    }
    Dog.__proto__ = Blueprint
     
    var Shepherd = {
        fluffy: true
    }
    Shepherd.__proto__ = Dog
     
    var Pug = {
        curledTail: true
    }
    Pug.__proto__ = Dog
     
    var myPug = {
        name: "Puggy pug pug"
    }
    MyPug.__proto__ = Pug
     
    // to get the properties of `MyPug` we can flatten its prototypes
    var props = flattenPrototypes(myPug)
    // this now is a plain object with own properties which means
    // we can serialize and print it
    console.log(JSON.stringify(props))

    Installation

    npm install flatten-prototypes

    Tests

    npm test

    Contributors

    • Raynos

    MIT Licenced

    Keywords

    none

    Install

    npm i flatten-prototypes

    DownloadsWeekly Downloads

    1,315

    Version

    4.0.0

    License

    none

    Last publish

    Collaborators

    • raynos
    • uber
    • mattesch