whole_func_string: 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;
  }
func_code_string: 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;
  }
func_documentation_string: **********************  对象操作  ************************ 
  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