瀏覽代碼

more tuning

Evan You 11 年之前
父節點
當前提交
80b4c4f581
共有 3 個文件被更改,包括 10 次插入25 次删除
  1. 4 2
      src/instance/scope.js
  2. 6 11
      src/observe/observer.js
  3. 0 12
      test/unit/specs/observer_spec.js

+ 4 - 2
src/instance/scope.js

@@ -21,7 +21,8 @@ exports._initScope = function () {
     : {}
   // copy initial data into scope
   var keys = Object.keys(data)
-  for (var key, i = 0, l = keys.length; i < l; i++) {
+  var i = keys.length
+  while (i--) {
     // use defineProperty so we can shadow parent accessors
     key = keys[i]
     _.define(scope, key, data[key], true)
@@ -141,7 +142,8 @@ exports._initProxy = function () {
 
   // proxy scope data on vm
   var keys = Object.keys(scope)
-  for (var i = 0, l = keys.length; i < l; i++) {
+  var i = keys.length
+  while (i--) {
     _.proxy(this, scope, keys[i])
   }
   // keep proxying up-to-date with added/deleted keys.

+ 6 - 11
src/observe/observer.js

@@ -110,18 +110,13 @@ Observer.create = function (value, options) {
  */
 
 p.walk = function (obj) {
-  var key, val, descriptor, prefix
-  for (key in obj) {
+  var keys = Object.keys(obj)
+  var i = keys.length
+  var key, val, prefix
+  while (i--) {
+    key = keys[i]
     prefix = key.charCodeAt(0)
-    if (
-      prefix === 0x24 || // $
-      prefix === 0x5F    // _
-    ) {
-      continue
-    }
-    descriptor = Object.getOwnPropertyDescriptor(obj, key)
-    // only process own non-accessor properties
-    if (descriptor && !descriptor.get) {
+    if (prefix !== 0x24 && prefix !== 0x5F) { // skip $ or _
       val = obj[key]
       this.observe(key, val)
       this.convert(key, val)

+ 0 - 12
test/unit/specs/observer_spec.js

@@ -79,18 +79,6 @@ describe('Observer', function () {
     expect(spy.calls.count()).toBe(0)
   })
 
-  it('ignore accessors', function () {
-    var obj = {
-      a: 123,
-      get b () {
-        return this.a
-      }
-    }
-    var ob = Observer.create(obj)
-    obj.a = 234
-    expect(obj.b).toBe(234)
-  })
-
   it('warn duplicate value', function () {
     spyOn(_, 'warn')
     var obj = {