介绍一个不知道怎么形容的小东西--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 ...
随机推荐
- getway网关跨域问题记录
一.问题产生环境 1.1 为什么会产生跨域问题? 跨域不一定都会有跨域题. 因为跨域问题是浏览器对于ajax请求的一种安全限制: 一个页面发起的 ajax请求,只能是与当前页域名相同的路径,这能有效的 ...
- Qt编写嵌入式linux输入法/支持自定义词语和繁体/支持wayland和watson/纯QWidget/界面精美可换肤
一.功能特点 纯QWidget编写,原创输入法机制,没有任何第三方动态库的依赖. 支持各种Qt版本,包括Qt4.Qt5.Qt6及后续版本. 支持各种编译器,包括mingw.msvc.gcc.clang ...
- 首次公开,最新手机QQ客户端架构的技术演进实践
本文由腾讯技术何金源分享,原题"不畏移山,手机QQ技术架构升级变迁史",本文进行了排版和内容优化等. 1.引言 接上篇<总是被低估,从未被超越,揭秘QQ极致丝滑背后的硬核IM ...
- 在 .NET 中使用 Tesseract 识别图片文字
1. 什么是 Tesseract Tesseract 是一个强大的字符识别 (OCR) 工具.它最初由 HP 发布,现在由 Google 和学术社区共同维护和开发. Tesseract 支持多种语言和 ...
- Note -「Lagrange 反演」记笔习学
也许施工完成啦? 对于常数项为 \(0\),一次项非 \(0\) 的多项式 \(F,G\),定义复合运算 \(\circ\),满足 \[(F\circ G)(x)=F(G(x))=\sum_{ ...
- keycloak~巧用client-scope实现token字段和userinfo接口的授权
keycloak中的client-scope允许你为每个客户端分配scope,而scope就是授权范围,它直接影响了token中的内容,及userinfo端点可以获取到的用户信息,这块我们可以通过自定 ...
- w3cschool-Jenkins中文文档
https://www.w3cschool.cn/jenkins/ Jenkins中文文档 阅读(1173.5k)收藏赞(54)分享 手册简介 Jenkins是一个开源的持续集成的服务器,Jenki ...
- react生命周期-渲染阶段
import React, { Component } from "react"; export default class Shengming extends Component ...
- JAVA8——StringJoiner类
引言:在阅读项目代码是,突然看到了StringJoiner这个类的使用,感觉很有意思,对实际开发中也有用,实际上是运用了StringBuilder的一个拼接字符串的封装处 介绍 StringJoine ...
- 用python做时间序列预测七:时间序列复杂度量化
本文介绍一种方法,帮助我们了解一个时间序列是否可以预测,或者说了解可预测能力有多强. Sample Entropy (样本熵) Sample Entropy是Approximate Entropy(近 ...