五一后学习记录

  |  
 阅读次数

Flutter & Dart

移动端洪流
Flutter: Android & ios 原生开发, Google 布局 下一代 客户端 统一开发框架

Dart语言入门

一、DartPad

可以直接在浏览器里编写和运行Dart程序的开源工具

二、Dart SDK

在Windows和Linux安装参考

需翻墙,多次安装 可解决


Cocos Creater

游戏开发

ES6 Proxy 代理

个人理解就是代理js原生方法的 代理模式

1. Proxy 支持的拦截操作一览,一共 13 种

  • get(target, propKey, receiver):拦截对象属性的读取,比如proxy.fooproxy['foo']

  • set(target, propKey, value, receiver): 拦截对象属性的设置,比如 proxy.foo = vproxy['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 ) 指的是 函数自动观察数据对象,一旦对象有变化,函数就会自动执行。

##