**********************  对象操作  ************************ 
sort Object attributes by function
and transfer them into array
@param  {Object} obj Object form from numric
@param  {Function} fn sort function
@return {Array} the sorted attirbutes array
 
to check if an descriptor
@param {anything} desc
function isDescriptor(desc) {
  if (!desc || !desc.hasOwnProperty) {
    return false;
  }

  var keys = ['value', 'initializer', 'get', 'set'];

  for (var i = 0, l = keys.length; i < l; i++) {
    if (desc.hasOwnProperty(keys[i])) {
      return true;
    }
  }
  return false;
}