Flutter & Dart
移动端洪流
Flutter: Android & ios 原生开发, Google 布局 下一代 客户端 统一开发框架
Dart语言入门
一、DartPad
可以直接在浏览器里编写和运行Dart程序的开源工具
二、Dart SDK
需翻墙,多次安装 可解决
Cocos Creater
游戏开发
ES6 Proxy 代理
个人理解就是代理js原生方法的 代理模式
1. Proxy 支持的拦截操作一览,一共 13 种
get(target, propKey, receiver):拦截对象属性的读取,比如
proxy.foo
和proxy['foo']
。set(target, propKey, value, receiver): 拦截对象属性的设置,比如
proxy.foo = v
或proxy['foo'] = v
,返回一个布尔值。has(target, propKey):拦截
propKey in proxy
的操作,返回一个布尔值。deleteProperty(target, propKey): 拦截
delete proxy[propKey]
的操作,返回一个布尔值。ownKeys(target): 拦截
Object.getOwnPropertyNames(proxy)
、Object.getOwnPropertySymbols(proxy)
、Object.keys(proxy)
、for...in
循环, 返回一个数组。
该方法返回目标对象所有自身的属性的属性名,而Object.keys()
的返回结果仅包括目标对象自身的可遍历属性。getOwnPropertyDescriptor(target, propKey): 拦截
Object.getOwnPropertyDescriptor(proxy, propKey)
, 返回属性的描述对象。defineProperty(target, propKey, propDesc): 拦截
Object.defineProperty(proxy, propKey, propDesc)
、Object.defineProperties(proxy, propDescs)
, 返回一个布尔值。preventExtensions(target): 拦截
Object.isExtensible(proxy)
, 返回一个布尔值。setPrototypeOf(target, proto): 拦截
Object.setPrototypeOf(proxy, proto)
,返回一个布尔值。如果目标对象是函数,那么还有两种额外操作可以拦截。apply(target, object, args):拦截 Proxy 实例作为函数调用的操作,比如
proxy(...args)
、proxy.call(object, ...args)
、proxy.apply(...)
。construct(target, args):拦截 Proxy 实例作为构造函数调用的操作,比如
new proxy(...args)
。
2. Proxy 实例的方法
下面是上面这些拦截方法的详细介绍。
get()
3. Proxy.revocable()
Proxy.revocable方法返回一个可取消的 Proxy 实例。
4. this 问题
ES6 Reflect 映射
1. 概述
Reflect
对象的方法与 Proxy
对象的方法一一对应, 每一个Proxy
对象的拦截操作,内部都调用对应的Reflect
方法,保证原生行为能够正常执行。
可在此基础上 另外添加额外工作
2. 静态方法
- Reflect.apply(target, thisArg, args)
- Reflect.construct(target, args)
- Reflect.get(target, name, receiver)
- Reflect.set(target, name, value, receiver)
- Reflect.defineProperty(target, name, desc)
- Reflect.deleteProperty(target, name)
- Reflect.has(target, name)
- Reflect.ownKeys(target)
- Reflect.isExtensible(target)
- Reflect.preventExtensions(target)
- Reflect.getOwnPropertyDescriptor(target, name)
- Reflect.getPrototypeOf(target)
- Reflect.setPrototypeOf(target, prototype)
上面这些方法的作用,大部分与 Object
对象的同名方法的作用都是相同的,而且它与Proxy
对象的方法是一一对应的。
3. 实例:使用 Proxy
实现观察者模式
观察者模式 ( Observer mode
) 指的是 函数自动观察数据对象,一旦对象有变化,函数就会自动执行。
##