diff --git a/packages/message/src/main.js b/packages/message/src/main.js
index 3799e7f2e..b6bad3d14 100644
--- a/packages/message/src/main.js
+++ b/packages/message/src/main.js
@@ -2,6 +2,7 @@ import Vue from 'vue';
 import Main from './main.vue';
 import { PopupManager } from 'element-ui/src/utils/popup';
 import { isVNode } from 'element-ui/src/utils/vdom';
+import { isObject } from 'element-ui/src/utils/types';
 let MessageConstructor = Vue.extend(Main);
 
 let instance;
@@ -44,14 +45,17 @@ const Message = function(options) {
 };
 
 ['success', 'warning', 'info', 'error'].forEach(type => {
-  Message[type] = options => {
-    if (typeof options === 'string') {
-      options = {
-        message: options
-      };
+  Message[type] = (options) => {
+    if (isObject(options) && !isVNode(options)) {
+      return Message({
+        ...options,
+        type
+      });
     }
-    options.type = type;
-    return Message(options);
+    return Message({
+      type,
+      message: options
+    });
   };
 });