介绍一个不知道怎么形容的小东西--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 ...
随机推荐
- Qt编写机器码秘钥控制/日期防篡改/离线使用/硬件标识/运行时间/数量控制/批量更新秘钥
一.前言说明 搞软件开发一直追求精益求精的目标,从第一版的秘钥生成器到今天这个版本,经历了十年的时间,最初的版本做的非常简陋,就是搞了个异或加密,控制运行时间,后面又增加设备数量的控制,然后就是到期时 ...
- Qt开发经验小技巧266-270
从Qt6.4版本开始多媒体模块提供了ffmpeg作为后端解码使用(6.5版本默认就是ffmpeg),可以通过设置环境变量来更改使用哪种后端解码,在main函数的第一行 qputenv("QT ...
- Linux 下挂载群晖 NAS 硬盘拓展空间(NFS)
在群晖 NAS 上配置 开启 NFS 服务 打开群晖的 设置 - 文件服务 - NFS,把 NFS 服务勾选上,协议选最新即可. 配置文件夹的 NFS 权限 在 设置 - 共享文件夹 下,选择需要开启 ...
- elementPlus 问题总结
第一次搞,遇上很多弱智问题,记录一下 安装elementPlus $ npm install element-plus --save 全局引入 import ElementPlus from 'ele ...
- P1437 敲砖块 题解
题意 在一个凹槽中放置了 \(n\) 层砖块.最上面的一层有 \(n\) 块砖,从上到下每层依次减少一块砖.每块砖都有一个分值,敲掉这块砖就能得到相应的分值,如下图所示: 14 15 4 3 23 3 ...
- x86平台SIMD编程入门(3):浮点指令
1.算术指令 算术类型 函数示例 备注 加 _mm_add_sd._mm256_add_ps 减 _mm_sub_sd._mm256_sub_ps 乘 _mm_mul_sd._mm256_mul_ps ...
- WPF Play Image slider animation using Storyboard
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using Sys ...
- NET Core3.1 Cors 添加跨域支持
在 Startup 里加: services.AddCors(options => options.AddPolicy( DefaultCors, p => p.SetIsOriginAl ...
- 数据同步工具-DataX
1.DataX 基本介绍 DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具,致力于实现包括:关系型数据库(MySQL.Oracle等).HDFS.Hive.HBase.ODPS.FTP等各种异 ...
- w3cschool-Apache Storm 教程
https://www.w3cschool.cn/apache_storm/ Apache Storm教程Apache Storm简介Apache Storm核心概念Apache Storm集群架构A ...