vue.js 源代码学习笔记 ----- instance proxy

vue

/* not type checking this file because flow doesn't play well with Proxy */

import config from 'core/config'

import { warn, makeMap } from '../util/index'

let initProxy

if (process.env.NODE_ENV !== 'production') {

//一些能使用的全局变量

const allowedGlobals = makeMap(

'Infinity,undefined,NaN,isFinite,isNaN,' +

'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +

'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +

'require' // for Webpack/Browserify

)


//未定义缺使用了

const warnNonPresent = (target, key) => {

warn(

`Property or method "${key}" is not defined on the instance but ` +

`referenced during render. Make sure to declare reactive data ` +

`properties in the data option.`,

target

)

}


//es6 proxy详解

const hasProxy =

typeof Proxy !== 'undefined' &&

Proxy.toString().match(/native code/)

if (hasProxy) {

const isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta')


//避免设置 系统鼠标 属性
   config.keyCodes = new Proxy(config.keyCodes, {

set (target, key, value) {

if (isBuiltInModifier(key)) {

warn(`Avoid overwriting built-in modifier in config.keyCodes: .${key}`)

return false

} else {

target[key] = value

return true

}

}

})

}

const hasHandler = {

has (target, key) {

const has = key in target

const isAllowed = allowedGlobals(key) || key.charAt(0) === '_'

if (!has && !isAllowed) {

warnNonPresent(target, key)

}
//如果有这个key 或者 不是全局函数, 返回true

return has || !isAllowed

}

}

const getHandler = {

get (target, key) {

if (typeof key === 'string' && !(key in target)) {

warnNonPresent(target, key)

}

return target[key]

}

}

initProxy = function initProxy (vm) {

if (hasProxy) {

// determine which proxy handler to use

const options = vm.$options

const handlers = options.render && options.render._withStripped

? getHandler

: hasHandler

vm._renderProxy = new Proxy(vm, handlers)

} else {

vm._renderProxy = vm

}

}

}

export { initProxy }

 此方法做了一些对象操作的拦截 和 警告

以上是 vue.js 源代码学习笔记 ----- instance proxy 的全部内容, 来源链接: utcz.com/z/376526.html

回到顶部