فهرست منبع

cache object.defineProperty

Evan You 12 سال پیش
والد
کامیت
a2b7a4fd4f
3فایلهای تغییر یافته به همراه9 افزوده شده و 6 حذف شده
  1. 5 4
      src/compiler.js
  2. 2 1
      src/observer.js
  3. 2 1
      src/utils.js

+ 5 - 4
src/compiler.js

@@ -14,6 +14,7 @@ var Emitter     = require('./emitter'),
     makeHash    = utils.hash,
     extend      = utils.extend,
     hasOwn      = ({}).hasOwnProperty,
+    def         = Object.defineProperty,
 
     // hooks to register
     hooks = [
@@ -321,7 +322,7 @@ CompilerProto.observeData = function (data) {
     $dataBinding.update(data)
 
     // allow $data to be swapped
-    Object.defineProperty(compiler.vm, '$data', {
+    def(compiler.vm, '$data', {
         get: function () {
             compiler.observer.emit('get', '$data')
             return compiler.data
@@ -645,7 +646,7 @@ CompilerProto.defineProp = function (key, binding) {
 
     binding.value = data[key]
 
-    Object.defineProperty(compiler.vm, key, {
+    def(compiler.vm, key, {
         get: function () {
             return compiler.data[key]
         },
@@ -664,7 +665,7 @@ CompilerProto.defineMeta = function (key, binding) {
     var ob = this.observer
     binding.value = this.data[key]
     delete this.data[key]
-    Object.defineProperty(this.vm, key, {
+    def(this.vm, key, {
         get: function () {
             if (Observer.shouldGet) ob.emit('get', key)
             return binding.value
@@ -696,7 +697,7 @@ CompilerProto.defineExp = function (key, binding, directive) {
  */
 CompilerProto.defineComputed = function (key, binding, value) {
     this.markComputed(binding, value)
-    Object.defineProperty(this.vm, key, {
+    def(this.vm, key, {
         get: binding.value.$get,
         set: binding.value.$set
     })

+ 2 - 1
src/observer.js

@@ -6,6 +6,7 @@ var Emitter  = require('./emitter'),
     typeOf   = utils.typeOf,
     def      = utils.defProtected,
     hasOwn   = ({}).hasOwnProperty,
+    oDef     = Object.defineProperty,
     slice    = [].slice,
     // types
     OBJECT   = 'Object',
@@ -254,7 +255,7 @@ function convertKey (obj, key) {
 
     init(obj[key])
 
-    Object.defineProperty(obj, key, {
+    oDef(obj, key, {
         get: function () {
             var value = values[key]
             // only emit get on tip values

+ 2 - 1
src/utils.js

@@ -3,6 +3,7 @@ var config    = require('./config'),
     win       = window,
     console   = win.console,
     timeout   = win.setTimeout,
+    def       = Object.defineProperty,
     THIS_RE   = /[^\w]this[^\w]/,
     hasClassList = 'classList' in document.documentElement,
     ViewModel // late def
@@ -80,7 +81,7 @@ var utils = module.exports = {
      *  or for...in loops.
      */
     defProtected: function (obj, key, val, enumerable, writable) {
-        Object.defineProperty(obj, key, {
+        def(obj, key, {
             value        : val,
             enumerable   : enumerable,
             writable     : writable,