Evan You 11 lat temu
rodzic
commit
05e24246c8
4 zmienionych plików z 14 dodań i 12 usunięć
  1. 1 1
      src/binding.js
  2. 3 2
      src/emitter.js
  3. 9 8
      src/instance/scope.js
  4. 1 1
      src/util/merge-option.js

+ 1 - 1
src/binding.js

@@ -35,7 +35,7 @@ p._addChild = function (key, child) {
  */
 
 p._addSub = function (sub) {
-  this._subs.unshift(sub)
+  this._subs.push(sub)
 }
 
 /**

+ 3 - 2
src/emitter.js

@@ -89,7 +89,9 @@ p.off = function (event, fn) {
 
 /**
  * The internal, faster emit with fixed amount of arguments
- * using Function.call.
+ * using Function.call. This emit assumes that callbacks
+ * triggered will not modify the callback list being
+ * iterated through.
  *
  * @param {Object} event
  * @return {Emitter}
@@ -99,7 +101,6 @@ p.emit = function (event, a, b, c, d) {
   this._cbs = this._cbs || {}
   var callbacks = this._cbs[event]
   if (callbacks) {
-    callbacks = _.toArray(callbacks)
     var ctx = this._ctx
     for (var i = 0, l = callbacks.length; i < l; i++) {
       callbacks[i].call(ctx, a, b, c, d)

+ 9 - 8
src/instance/scope.js

@@ -10,6 +10,7 @@ var dataEvents = [
   'add:self',
   'delete:self'
 ]
+var proxyEvents = dataEvents.slice(0, 5)
 
 /**
  * Setup the data scope of an instance.
@@ -63,16 +64,16 @@ exports._initObserver = function () {
   var ob = this.$observer = new Emitter(this)
   // setup data proxy handlers
   var proxies = this._dataProxies = {}
-  dataEvents.forEach(function (event) {
-    proxies[event] = function (a, b, c) {
+  proxyEvents.forEach(function (event) {
+    proxies[event] = function dataProxyFn (a, b, c) {
       ob.emit(event, a, b, c)
     }
   })
   var self = this
-  proxies['add:self'] = function (key) {
+  proxies['add:self'] = function dataProxyFn (key) {
     self._proxy(key)
   }
-  proxies['delete:self'] = function (key) {
+  proxies['delete:self'] = function dataProxyFn (key) {
     self._unproxy(key)
   }
 }
@@ -173,10 +174,10 @@ exports._proxy = function (key) {
     Object.defineProperty(self, key, {
       configurable: true,
       enumerable: true,
-      get: function () {
+      get: function proxyGetter () {
         return self._data[key]
       },
-      set: function (val) {
+      set: function proxySetter (val) {
         self._data[key] = val
       }
     })
@@ -265,13 +266,13 @@ exports._defineMeta = function (key, value) {
   Object.defineProperty(this, key, {
     enumerable: true,
     configurable: true,
-    get: function () {
+    get: function metaGetter () {
       if (Observer.emitGet) {
         ob.emit('get', key)
       }
       return value
     },
-    set: function (val) {
+    set: function metaSetter (val) {
       if (val !== value) {
         value = val
         ob.emit('set', key, val)

+ 1 - 1
src/util/merge-option.js

@@ -77,7 +77,7 @@ strats.partials =
 strats.transitions =
 strats.components = function (parentVal, childVal, vm, key) {
   var ret = Object.create(parentVal || null)
-  extend(ret, childVal)
+  if (childVal) extend(ret, childVal)
   if (vm && vm.$parent) {
     var scopeVal = vm.$parent.$options[key]
     var keys = Object.keys(scopeVal)