versions/0.2.2/oj.js
function _setObject(obj){
    var args = arguments,
      o = obj,
      len = args.length,
      // keys are args ix: 1 to n-2
      keys = 3 <= len ? slice.call(args, 1, len = len - 1) : (len = 1, []),
      // value is last arg
      value = args[len++],
      ix, k

    for (ix = 0; ix < keys.length; ix++){
      k = keys[ix]

      // Initialize key to empty object if necessary
      if (typeof o[k] !== 'object')
        o[k] = {}

      // Set final value if this is the last key
      if (ix === keys.length - 1)
        o[k] = value
      else
        // Continue deeper
        o = o[k]
    }
    return obj
  }
function _setObject(obj){
    var args = arguments,
      o = obj,
      len = args.length,
      // keys are args ix: 1 to n-2
      keys = 3 <= len ? slice.call(args, 1, len = len - 1) : (len = 1, []),
      // value is last arg
      value = args[len++],
      ix, k

    for (ix = 0; ix < keys.length; ix++){
      k = keys[ix]

      // Initialize key to empty object if necessary
      if (typeof o[k] !== 'object')
        o[k] = {}

      // Set final value if this is the last key
      if (ix === keys.length - 1)
        o[k] = value
      else
        // Continue deeper
        o = o[k]
    }
    return obj
  }
function _setObject ( obj ) { var args = arguments , o = obj , len = args . length , // keys are args ix: 1 to n-2 keys = 3 <= len ? slice . call ( args , 1 , len = len - 1 ) : ( len = 1 , [ ] ) , // value is last arg value = args [ len ++ ] , ix , k for ( ix = 0 ; ix < keys . length ; ix ++ ) { k = keys [ ix ] // Initialize key to empty object if necessary if ( typeof o [ k ] !== 'object' ) o [ k ] = { } // Set final value if this is the last key if ( ix === keys . length - 1 ) o [ k ] = value else // Continue deeper o = o [ k ] } return obj }
_setObject(obj, k1, k2, ..., value): Set object deeply key by key ensure each part is an object
_setObject ( obj k1 k2 ... value ) : Set object deeply key by key ensure each part is an object