UltimateDescriptor
Adds cool features to working with descriptor
Allows to create object connections of high complexity using generators
Usage:
const Descriptor = ; /* ------------ Tools ------------- */ // returns new Descriptor object// Descriptor( {descriptor:Object|Descriptor}[, {originObj:Object}, {originProp:String}] ) => {Descriptor} // extracts descriptor form object// Descriptor.get( {obj:Object}, {prop:String}[, {returnDescriptor:Boolean}] ) => {Object|Descriptor|undefined} // extends descriptor with others// Descriptor.extend( {descriptor1:Object|Descriptor}[, ...] ) => {Object|Descriptor} // converts object with property descriptors to result object// Descriptor.toObject( {propDescriptors:Object} ) => {Object} // Returns object clone where all properties are defined via origin object's descriptors// Descriptor.clone( {obj:Object} ) => {Object} // returns generator constructor// Descriptor.generator( {generatorFunc:Function} ) => {Generator} // Returns new object with replaced descriptors// Descriptor.replace( [{deep:Boolean},] {obj:Object}, {descriptors:Array|Generator|Object} )// to set filtering on which descriptor to use try this:// descriptors = [ { filter: function ( prop, obj ) { return prop == 'test' }, descriptor: YourDescr } ] /* ------------ Example vars ------------- */ var obj1 = _phrase: 'Hello' obj2 = _phrase: 'Goodbye' ; Object; /* ------------ Simple usage ------------- */ var descriptor = Descriptor; console; // undefined descriptor; console; // Goodbye descriptor ; console; // Goodbye world! obj2phrase = 'Hello'; console; // Hello mighty world! // var result = Descriptor.extend( descriptor1, descriptor2 ); // result === descriptor1 /* ------------ Advanced usage ------------- */ // Descriptor.generator is used to generate final descriptor value using some function and originObj// Descriptor.generator can be used on whole descriptor or on any property var valueSayDescriptor = value: Descriptor // defining descriptor generator using property 'say' of some object configurable: true getSetDescriptor = Descriptor; // e.g. we want to connect obj2.whisper() with obj1.say() using generatorvar descriptor = ; descriptor; console; // Hello world! // now lets use obj1.phrase in generator using Proxy// with proxy changing obj2 will change obj1 and vice versa// they become connected via descriptor generatorsvar descriptor = ; descriptor; console; // Hello obj2phrase = 'Hi'; console; // Hi mightyconsole; // Hi mighty world! var obj3 = {}; // asProxy() here is not necessary it is still set to true from previous time// to disable proxy use asProxy( false )descriptor; console; // Hi mightyconsole; // Hi mighty world!console; // Hi mighty world! world! // now we can see how all these objects are connectedobj3phrase = 'Oh no'; console; // Oh no mighty mightyconsole; // Oh no mighty mighty world!console; // Oh no mighty mighty world! world!