当前位置: 首页 > news >正文

由此Prototype开发者搞了一个非常有名的函数出来,bind!以下是它的一个最简单的版本:

varbind =function(context, fn) {

returnfunction() {

returnfn.apply(context, arguments);

}

}

运行代码

不过为了面对更复杂的情况建议用以下版本。

functionbind(context,fn) {

varargs = Array.prototype.slice.call(arguments, 2);

returnargs.length == 0 ?function() {

returnfn.apply(context, arguments);

} :function() {

returnfn.apply(context, args.concat.apply(args, arguments));

};

};

它还有一个孪生兄弟叫bindAsEventListener ,绑定事件对象,没什么好说的。

varbindAsEventListener =function(context, fn) {

returnfunction(e) {

returnfn.call(context, (e|| window.event));

}

}

Prototype的版本

Function.prototype.bind =function() {

if(arguments.length < 2 && (typeofarguments[0]==='undefined'))

returnthis;

var_slice = Array.prototype.slice

var__method =this, args = _slice.call(arguments,0), context = args.shift();

returnfunction() {

return__method.apply(context, args.concat(_slice.call(arguments,0)));

}

}

运行代码

bind函数是如此有用,google早早已把它加入到Function的原型中了(此外还有inherits,mixin与partial)。

运行代码

有绑定就有反绑定,或者叫剥离更好!例如原生对象的泛化方法我们是无法通过遍历取出它们的。

for(variinArray){

alert(i +" : "+ Array[i])

}

for(variinArray.prototype){

alert(i +" : "+ Array.prototype[i])

}

运行代码

要取出它们就需要这个东西:

var_slice = Array.prototype.slice;

functionunbind(fn) {//第一步取得泛化方法

returnfunction(context) {//第二部用对应原生对象去重新调用!

returnfn.apply(context, _slice.call(arguments, 1));

};

};

http://www.jsqmd.com/news/1131436/

相关文章:

  • 立创EDA 标准版 10x10cm 免费打样实战:从原理图到下单的 5 个关键检查点
  • PyTorch 2.0 VGG16 MNIST 实战:从原始IDX文件解析到99%+准确率模型
  • 手机摄影进阶:光线、构图与对焦实战技巧
  • PCF8591与PIC24FV16KA302的I2C信号处理方案
  • Cartographer ROS Noetic 仿真建图实战:Gazebo+Rviz 完整流程与 3 个关键配置文件解析
  • 机械设计公差标注实战:轴承/齿轮/皮带轮5类配合公差等级选用指南
  • PyTorch DataLoader 高级配置:5个核心参数详解与多进程加载避坑指南
  • POSIX 1003.1 标准解析:从 fork/exec 到 72 个系统调用的可移植性实践
  • 如何彻底告别重复点击:AutoClicker鼠标自动化完全指南
  • 欢迎来到我的技术分享
  • RTVS 1.3.0 阿里云 CentOS 7.8 部署:5个关键端口映射与 Docker 网络配置详解
  • H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案
  • TRAE 完全指南:字节跳动的“AI 原生 IDE”进化论
  • tqdm.notebook 在 JupyterLab 4.x 中的 3 种配置方案与常见问题修复
  • 免费二维码修复工具终极指南:三步拯救损坏二维码
  • 3分钟永久告别IDM激活弹窗:开源脚本让下载管理无忧
  • GHelper终极指南:华硕笔记本性能控制神器完全解析
  • 龙芯3B6000平台GitLab Runner Docker执行器配置与避坑指南
  • 资源编号321_高德车机版 v9.5.0.600006 红绿灯显示优化版
  • (毕业必看)实测好用的AI论文软件,毕业党收藏备用
  • 无人机与机器人动力系统核心技术解析
  • acme.sh私钥加密存储:基于OpenSSL的自动化证书安全管理方案
  • 【监控与可观测性】08-PromQL查询语言速查:30个常用表达式
  • 多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理
  • 内网横向渗透实战:从环境搭建到信息搜集的完整流程解析
  • STM32与LV30条码扫描器的工业级硬件协同设计
  • B站视频下载神器:5分钟掌握大会员4K视频本地保存技巧
  • LSTM 时间序列预测实战:基于3000期双色球数据,构建7维序列模型
  • 私有云管理平台登录绕过漏洞:从客户端信任模型到安全防御实践
  • 军事仓储空间智能引擎:从三维建模到风险预测