介绍一个不知道怎么形容的小东西--Proxy
what's this?
The Proxy object is used to define custom behavior for fundamental operations (e.g. property lookup, assignment, enumeration, function invocation, etc).
It's means that you can define the fundamental behavior to control the object that you currently use.Such as read a property of the object, you can define a get trap method of the handler that is the second parmater of the proxy 's constructor ,or set a property you can use set trap method.And so on.
Just like it's name, proxy is a middle-ware between your operation and actual object recived the opreation.
英文写的好吃力...还是继续写中文吧
那么我们可以基于此做些什么好玩的事呢?首先你们有没有注意到:这个东西和es5里边的寄存器方法很像,所以我们可以简易的实现一个单向的数据绑定:
let modal = new Proxy(
{
data:{},
bindList:{},
/*
* @param {DomElement} entry dom节点
* @param {String} prop 要绑定的属性
* @param {String} data 该属性对应的数据名称
bind:function(entry,prop,data){
let self = this;
if( !this.bindList[data] )
this.bindList[data] = [];
this.bindList[data].push(function(){
entry[prop] = self['data'][data]
})
}
},{
get:function( obj, prop,reviver){
if( prop == 'data' || prop == 'bindList' || prop == 'bind' )
return obj[prop]
return obj['data'][prop] ? obj['data'][prop] : undefined;
},
set:function( obj, data, value){
let index = 0;
obj['data'][data] = value;
while( obj['bindList'][data][index] ){
obj['bindList'][data][index]();
index++;
} }
})
怎么玩呢?我们只需要调用modal的bind方法,然后将需要绑定的属性跟对应的data的名字一起传入即可。当然啦,这东西只能玩一下,如果真的要在实际项目中运用估计性能会成为一大难题,因为整个数据绑定的核心我是使用了闭包函数完成的。
之所以开篇写不知道怎么形容是因为我总觉得这玩意能搞大事情,但是另一方面,你在使用它的时候要完成某种操作很可能要使用与原来截然不同的方式去完成,所以到底是编程利器还是其他的东西 ,只能拭目以待了。还有以前使用avalone时avalone的define方法返回来的东西也是个proxy所以影响深刻,当然了此proxy非彼proxy只是名字相似罢了。
介绍一个不知道怎么形容的小东西--Proxy的更多相关文章
- 介绍一个二次排序的小技巧(best coder27期1001jump jump jump)
先来描述一下问题: 问题描述 有n小孩在比赛跳远,看谁跳的最远.每个小孩可以跳3次,这个小孩的成绩就是三次距离里面的最大值.例如,一个小孩跳3次的距离分别时10, 30和20,那么这个小孩的成绩就是3 ...
- 用Go语言写了一个电脑搜索文件的小东西
package main import ( "bytes" "fmt" "os" "os/exec" "pat ...
- 文件系统:介绍一个高大上的东西 - 零基础入门学习Python030
文件系统:介绍一个高大上的东西 让编程改变世界 Change the world by program 接下来我们会介绍跟Python的文件相关的一些十分有用的模块.模块是什么?不知大家对以下代码还有 ...
- 在ASP.NET下做了一个实验MVC的小东西
星期五下班前一时兴起,对MVC发表了一点看法.后来就想干脆弄个小东西来验证一些自己的想法帮组理清思路.所要源代码的免了,3个小时的急就章实在是乱得可以,既没有好的架构,也没有任何代码质量可言,主要是实 ...
- 第一个java的小东西
第一次自己写的一个java的小东西,毕竟自己第一次写的,其中可谓是历经艰难,最后总结下来就是java实在是不适合写界面化的东西代码量比较大,这还不是最关键的,最关键的是控件的位置实在是太难控制了. 这 ...
- 一个cheat命令 == Linux命令小抄大全
本文介绍一个Linux超级命令,有了这个命令,你就可以开开心心的使用linux上的各种命令了.当你要执行一个linux命令,在这个命令参数选项众多时,你一般怎么做?对,我们大多数人都会去求助man命令 ...
- 一个基于ES5的vue小demo
由于现在很多vue项目都是基于ES6开发的,而我学vue的时候大多是看vue官网的API,是基于ES5的,所以对于刚接触项目的我来说要转变为项目的模块化写法确实有些挑战.因此,我打算先做一个基于ES5 ...
- 介绍一个简单的Parser
我们已经学习了怎样创建一个简单的Monad, MaybeMonad, 并且知道了它如何通过在 Bind函数里封装处理空值的逻辑来移除样板式代码. 正如之前所说的,我们可以在Bind函数中封装更复杂的逻 ...
- 介绍一个非常好用的跨平台C++开源框架:openFrameworks
介绍一个非常好用的跨平台C++开源框架:openFrameworks 简介 首先需要说明的一点是: openFrameworks 设计的初衷不是为计算机专业人士准备的, 而是为艺术专业人士准备的, 就 ...
- 用c#写的一个局域网聊天客户端 类似小飞鸽
用c#写的一个局域网聊天客户端 类似小飞鸽 摘自: http://www.cnblogs.com/yyl8781697/archive/2012/12/07/csharp-socket-udp.htm ...
随机推荐
- MySQL said: Authentication plugin 'caching_sha2_password' cannot be loaded
OUTLINE问题描述解决方案问题描述在mac下,用sequel pro连接数据库,出现以下问题: MySQL said: Authentication plugin 'caching_sha2_pa ...
- Qt音视频开发01-共享解码线程(耗时一年/性能凶残/至臻完美)
一.前言 大概在8年前就开始用ffmpeg做视频解码的显示,第一个版本就100行代码左右,功能极其简单,就是开个线程解码视频流转成图片发给主界面绘制.时间过得真快,从当初的一胎到现在二胎都上学了三胎计 ...
- WxPython跨平台开发框架之模块字段权限的管理
在我的很多Winform开发项目中,统一采用了权限管理模块来进行各种权限的控制,包括常规的功能权限(工具栏.按钮.菜单权限),另外还可以进行字段级别的字段权限控制,字段权限是我们在一些对权限要求比较严 ...
- JVM实战—11.OOM的原因和模拟以及案例
大纲 1.线上系统突然由于OOM内存溢出挂掉 2.什么是内存溢出及哪些区域会发生内存溢出 3.Metaspace如何因类太多而发生内存溢出 4.无限制调用方法如何让线程的栈内存溢出 5.对象太多导致堆 ...
- 《计算机体系结构与SoC设计》(一)
1. 天机芯片 "天机"芯片,全称为"天机芯"(Tianjic),是由清华大学施路平团队研发的一款类脑计算芯片.这款芯片在2019年登上了世界顶级学术杂志< ...
- CH32V203F6P6-TSSOP20测试之02---点灯成功
一.问题思考 直接用官方提供的例程,为何下载程序后没有什么响应,难道自己设计的电路有什么不妥? 于是,对于电路进行具体分析,结果发现: 第一.官方的BOOT0采用杜邦线连接,在芯片手册好像找不到关于B ...
- w3cschool-XML教程
参考https://www.w3cschool.cn/xml/ XML 教程 让我们先来简单的了解一下 XML: XML 指可扩展标记语言(eXtensible Markup Language). X ...
- springBoot(2)--初步理解
一.定时任务 1.步骤: 1:在启动类上写@EnableScheduling注解 2:在要定时任务的类上写@component 3:在要定时执行的方法上写@Scheduled(fixedRate=毫秒 ...
- Linux服务器上shell脚本批量循环测试接口连通性,bash工具循环测试curl性能
使用curl的-w选项来输出各种时间信息 -o /dev/null 用于丢弃响应体,只关心头部信息 -s 用于静默模式,不输出进度信息 %{http_code} 输出HTTP状态码 %{time_na ...
- HashMap的put方法的扩容流程
final Node<K,V>[] resize() { // [1,2,3,4,5,6,7,8,9,10,11,,,,] Node<K,V>[] oldTab = table ...