Просмотр исходного кода

The extends option supports an extended constructor

Pantelis Peslis 10 лет назад
Родитель
Сommit
8ff88a3ea2
2 измененных файлов с 5 добавлено и 2 удалено
  1. 3 1
      src/util/options.js
  2. 2 1
      test/unit/specs/util/options_spec.js

+ 3 - 1
src/util/options.js

@@ -333,7 +333,9 @@ export function mergeOptions (parent, child, vm) {
   var options = {}
   var options = {}
   var key
   var key
   if (child.extends) {
   if (child.extends) {
-    parent = mergeOptions(parent, child.extends, vm)
+    parent = typeof child.extends === 'function'
+      ? mergeOptions(parent, child.extends.options, vm)
+      : mergeOptions(parent, child.extends, vm)
   }
   }
   if (child.mixins) {
   if (child.mixins) {
     for (var i = 0, l = child.mixins.length; i < l; i++) {
     for (var i = 0, l = child.mixins.length; i < l; i++) {

+ 2 - 1
test/unit/specs/util/options_spec.js

@@ -282,7 +282,8 @@ describe('Util - Option merging', function () {
     var f1 = function () {}
     var f1 = function () {}
     var f2 = function () {}
     var f2 = function () {}
     var f3 = function () {}
     var f3 = function () {}
-    var componentA = { template: 'foo', methods: { f1: f1, f2: function () {} } }
+    var componentA = function () {}
+    componentA.options = { template: 'foo', methods: { f1: f1, f2: function () {} } }
     var componentB = { extends: componentA, methods: { f2: f2 } }
     var componentB = { extends: componentA, methods: { f2: f2 } }
     var componentC = { extends: componentB, template: 'bar', methods: { f3: f3 } }
     var componentC = { extends: componentB, template: 'bar', methods: { f3: f3 } }
     var res = merge({}, componentC)
     var res = merge({}, componentC)