免费刷金币,请点击这里
TE社区 > 前端技术
客服QQ:1206116161

浅析Javascript中bind()方法的使用与实现

lalalanima 于 2018-02-01 20:00:45 创建话题
(31)
(0)
举报

在讨论bind()方法之前我们先来看一道题目:

var altwrite = document.write; 
altwrite("hello"); 
//1.以上代码有什么问题
//2.正确操作是怎样的
//3.bind()方法怎么实现

对于上面这道题目,答案并不是太难,主要考点就是this指向的问题,altwrite()函数改变this的指向global或window对象,导致执行时提示非法调用异常,正确的方案就是使用bind()方法:

altwrite.bind(document)("hello") 
当然也可以使用call()方法:

altwrite.call(document, "hello") 
本文的重点在于讨论第三个问题bind()方法的实现,在开始讨论bind()的实现之前,我们先来看看bind()方法的使用:

绑定函数
bind()最简单的用法是创建一个函数,使这个函数不论怎么调用都有同样的this值。常见的错误就像上面的例子一样,将方法从对象中拿出来,然后调用,并且希望this指向原来的对象。如果不做特殊处理,一般会丢失原来的对象。使用bind()方法能够很漂亮的解决这个问题:

this.num = 9; 
var mymodule = { 
 num: 81,
 getNum: function() { return this.num; }
};

module.getNum(); // 81

var getNum = module.getNum; 
getNum(); // 9, 因为在这个例子中,"this"指向全局对象

// 创建一个'this'绑定到module的函数
var boundGetNum = getNum.bind(module); 
boundGetNum(); // 81 

偏函数(Partial Functions)

Partial Functions也叫Partial Applications,这里截取一段关于偏函数的定义:

Partial application can be described as taking a function that accepts some number of arguments, binding values to one or more of those arguments, and returning a new function that only accepts the remaining, un-bound arguments.

这是一个很好的特性,使用bind()我们设定函数的预定义参数,然后调用的时候传入其他参数即可:

function list() { 
 return Array.prototype.slice.call(arguments);
}

var list1 = list(1, 2, 3); // [1, 2, 3]

// 预定义参数37
var leadingThirtysevenList = list.bind(undefined, 37);

var list2 = leadingThirtysevenList(); // [37] 
var list3 = leadingThirtysevenList(1, 2, 3); // [37, 1, 2, 3] 

和setTimeout一起使用

一般情况下setTimeout()的this指向window或global对象。当使用类的方法时需要this指向类实例,就可以使用bind()将this绑定到回调函数来管理实例。

function Bloomer() { 
 this.petalCount = Math.ceil(Math.random() * 12) + 1;
}

// 1秒后调用declare函数
Bloomer.prototype.bloom = function() { 
 window.setTimeout(this.declare.bind(this), 1000);
};

Bloomer.prototype.declare = function() { 
 console.log('我有 ' + this.petalCount + ' 朵花瓣!');
};

注意:对于事件处理函数和setInterval方法也可以使用上面的方法

绑定函数作为构造函数

绑定函数也适用于使用new操作符来构造目标函数的实例。当使用绑定函数来构造实例,注意:this会被忽略,但是传入的参数仍然可用。

function Point(x, y) { 
 this.x = x;
 this.y = y;
}

Point.prototype.toString = function() { 
 return this.x + ',' + this.y; 
};

var p = new Point(1, 2); 
p.toString(); // '1,2'


var emptyObj = {}; 
var YAxisPoint = Point.bind(emptyObj, 0/*x*/); 
// 实现中的例子不支持,
// 原生bind支持:
var YAxisPoint = Point.bind(null, 0/*x*/);

var axisPoint = new YAxisPoint(5); 
axisPoint.toString(); // '0,5'

axisPoint instanceof Point; // true 
axisPoint instanceof YAxisPoint; // true 
new Point(17, 42) instanceof YAxisPoint; // true 

上面例子中Point和YAxisPoint共享原型,因此使用instanceof运算符判断时为true。

捷径

bind()也可以为需要特定this值的函数创造捷径。

例如要将一个类数组对象转换为真正的数组,可能的例子如下:

var slice = Array.prototype.slice;

// ...

slice.call(arguments); 

如果使用bind()的话,情况变得更简单:

var unboundSlice = Array.prototype.slice; 
var slice = Function.prototype.call.bind(unboundSlice);

// ...

slice(arguments); 

实现

上面的几个小节可以看出bind()有很多的使用场景,但是bind()函数是在 ECMA-262 第五版才被加入;它可能无法在所有浏览器上运行。这就需要我们自己实现bind()函数了。

首先我们可以通过给目标函数指定作用域来简单实现bind()方法:

Function.prototype.bind = function(context){ 
 self = this; //保存this,即调用bind方法的目标函数
 return function(){
   return self.apply(context,arguments);
 };
};

考虑到函数柯里化的情况,我们可以构建一个更加健壮的bind():

Function.prototype.bind = function(context){ 
 var args = Array.prototype.slice.call(arguments, 1),
 self = this;
 return function(){
   var innerArgs = Array.prototype.slice.call(arguments);
   var finalArgs = args.concat(innerArgs);
   return self.apply(context,finalArgs);
 };
};

这次的bind()方法可以绑定对象,也支持在绑定的时候传参。

继续,Javascript的函数还可以作为构造函数,那么绑定后的函数用这种方式调用时,情况就比较微妙了,需要涉及到原型链的传递:

Function.prototype.bind = function(context){ 
 var args = Array.prototype.slice(arguments, 1),
 F = function(){},
 self = this,
 bound = function(){
   var innerArgs = Array.prototype.slice.call(arguments);
   var finalArgs = args.concat(innerArgs);
   return self.apply((this instanceof F ? this : context), finalArgs);
 };

 F.prototype = self.prototype;
 bound.prototype = new F();
 return bound;
};

这是《JavaScript Web Application》一书中对bind()的实现:通过设置一个中转构造函数F,使绑定后的函数与调用bind()的函数处于同一原型链上,用new操作符调用绑定后的函数,返回的对象也能正常使用instanceof,因此这是最严谨的bind()实现。

对于为了在浏览器中能支持bind()函数,只需要对上述函数稍微修改即可:

Function.prototype.bind = function (oThis) { 
  if (typeof this !== "function") {
   throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
  }

  var aArgs = Array.prototype.slice.call(arguments, 1), 
    fToBind = this, 
    fNOP = function () {},
    fBound = function () {
     return fToBind.apply(
       this instanceof fNOP && oThis ? this : oThis || window,
       aArgs.concat(Array.prototype.slice.call(arguments))
     );
    };

  fNOP.prototype = this.prototype;
  fBound.prototype = new fNOP();

  return fBound;
 };

以上这篇浅析Javascript中bind()方法的使用与实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持TE网络。

扫码关注TE官方微博 扫码关注TE官方微博
浅析.net策略模式 jquery实现图片上传之前预览的方法 字符串长度函数strlen和mb_strlen的区别示例介绍 JQuery菜单效果的两个实例讲解(3) Python 加密的实例详解 JS Array对象入门分析 jQuery on()方法使用技巧详解 Linux shell中的printf的详细用法 vue项目实现记住密码到cookie功能示例(附源码) vue富文本框(插入文本、图片、视频)的使用及问题小结 bootstrap多层模态框滚动条消失的问题 关于递归运算的顺序测试代码 PHP判断远程图片或文件是否存在的实现代码 Android颜色配置器配置方法 ASP.NET MVC4入门教程(五):从控制器访问数据模型 JavaScript实现图片懒加载(Lazyload) oracle数据库ORA-01196错误解决办法分享 IOS 中UITextField和UITextView中字符串为空和空格的解决办法 html table表数据转Json格式示例代码 JSP 开发之servlet中调用注入spring管理的dao 浅谈iOS11新特性:新增拖拽交互体验 纯CSS实现漂亮的提交表单 跟老齐学Python之赋值,简单也不简单 js拖拽的原型声明和用法总结 DOCTYPE声明作用及用法详解 python二维列表一维列表的互相转换实例 php性能分析之php-fpm慢执行日志slow log用法浅析 AngularJS国际化详解及示例代码 mysql mycat 中间件安装与使用 javascript关于继承的用法汇总 Seajs的学习笔记 CentOS 一键配置rsync服务器脚本 html中通过JS获取JSON数据并加载的方法 JS 获取浏览器和屏幕宽高等信息的实现思路及代码 Javascript将JSON日期格式化 jsp留言板源代码三 给jsp初学者. Python生成密码库功能示例 详解nginx使用ssl模块配置支持HTTPS访问 Android 应用适配 Android 7.0 权限要求详解 js中的this关键字详解 vuejs使用axios异步访问时用get和post的实例讲解 PHP命名空间namespace用法实例分析 修正IE下使用CSS属性overflow的bug jQuery EasyUI 右键菜单--关闭标签_选项卡的简单实例 详解Javascript获取缓存和清除缓存API javascript实现字符串反转的方法 连续序号的 sql语句 自定义Gnome面板字体和颜色(Linux技巧) php关键字仅替换一次的实现函数 python实现简单温度转换的方法 .NET中读取Excel文件的数据及excelReader应用 iOS11带来的技术变化及注意事项 64位CentOs7源码安装mysql-5.6.35过程分享 div层的移动及性能优化 JS面向对象的程序设计相关知识小结 CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法 js 对小数加法精度处理示例说明 再谈JavaScript异步编程 jQuery根据用户电脑是mac还是pc加载对应样式的方法 基于jQuery对象和DOM对象和字符串之间的转化实例 深入浅析SQL Server 触发器 与jquery serializeArray()一起使用的函数,主要来方便提交表单 angular分页指令操作 如何减少浏览器的reflow和repaint win x64下安装oracle 12c出现INS-30131报错的解决方法 ASP.NET网站管理系统退出 清除浏览器缓存,Session的代码 ASP.NET Core简单介绍教程(1) php使用curl代理实现抓取数据的方法 常用CSS缩写语法总结 web网页按比例显示图片实现原理及js代码 html让局部强制出现滚动条不破坏整体的样式和布局 Python实现的多进程和多线程功能示例 Python使用arrow库优雅地处理时间数据详解 判断js的Array和Object的实现方法 IOS应用内支付返回新旧Receipt适配的方法 jQuery访问浏览器本地存储cookie、localStorage和sessionStorage的基本用法 JavaScript中的eval()函数使用介绍 js判断输入是否为正整数、浮点数等数字的函数代码 Mysql删除重复的数据 Mysql数据去重复 使用jQuery中的wrap()函数操作HTML元素的教程 jquery图形密码实现方法 AngularJS表格详解及示例代码 shell编程中的字符串截取方法小结 JavaScript的jQuery库插件的简要开发指南 JavaScript实现班级随机点名小应用需求的具体分析 javascript实现QQ空间相册展示源码 JavaScript正则表达式的分组匹配详解 Vue.js绑定HTML class数组语法错误的原因分析 Python中max函数用法实例分析 SQLSERVER语句的执行时间显示的统计结果是什么意思 PHP基于redis计数器类定义与用法示例 关于shiro中部分SpringCache失效问题的解决方法 php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】 vue .js绑定checkbox并获取、改变选中状态的实例 dedecms调用当前文档中TAG标签利于内页优化提高收录量 织梦系统DedeCMS设定栏目及文档权限登录后跳转到登陆前的页面的实现方法 jsp fckeditor 上传中文图片乱码问题的解决方法 Linux系统中的文件类型及文件扩展名详解 PHP使用mkdir创建多级目录的方法 JS实现部分HTML固定页面顶部随屏滚动效果 javascript实现复选框超过限制即弹出警告框的方法 PHP使用json_encode函数时不转义中文的解决方法 网站被SQL注入防范(WebKnight) 谈谈CentOS发布内核安全补丁:修复Meltdown和Spectre漏洞 Javascript生成json的函数代码(可以用php的json_decode解码) vue-router 中router-view不能渲染的解决方法 mongoDB分页的两种方法(图例) 微信公众平台开发教程(二) 基本原理及消息接口总结 时间戳转换为时间 年月日时间的JS函数 简单的远程FTP定时备份Shell脚本分享 asp.net连接数据库 增加,修改,删除,查询代码 Linux编译优化必须掌握的几个姿势总结 python版本坑 md5例子(python2与python3中md5区别) JS+CSS实现的经典圆角下拉菜单效果代码 jQuery实现点击小图显示大图代码分享 php socket客户端及服务器端应用实例 ASP动态级联菜单实现代码 Python2.x与Python3.x的区别 去掉gridPanel表头全选框的小例子 SQLServer数据库的各种管理方法 CSS教程高级应用 2个纯CSS面包屑导航栏实现代码 浅谈Windows是如何把SQL Server迁移到Linux上的 jquery学习笔记二 实现可编辑的表格 Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法 JS对话框_JS模态对话框showModalDialog用法总结 bootstrap table sum总数量统计实现方法 360提示[高危]使用存在漏洞的JQuery版本的解决方法 dedecms搬家后出现_include_templets_default_index.htm Not Found!解决方案 Jquery中的CheckBox、RadioButton、DropDownList的取值赋值实现代码 JS字符串false转boolean的方法(推荐) Fastest way to build an HTML string(拼装html字符串的最快方法) javascript getElementsByClassName函数 MySQL高可用解决方案MMM(mysql多主复制管理器) ASP.NET 站点地图(sitemap)简明教程 在Linux系统中创建和修改systemd单元文件 利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器) Ext JS添加子组件的误区探讨 JS使用ajax方法获取指定url的head信息中指定字段值的方法 在Vista IIS 7 中用 vs2005 调试 Web 项目的注意事项 ASP错误捕获的几种常规处理方式 HTML5 实现一个访问本地文件的实例 jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍 利用jquery.qrcode在页面上生成二维码且支持中文 PHP编码转换 JavaScript 对任意元素,自定义右键菜单的实现方法 asp.net编程获取项目根目录实现方法集合 Android ListView自定义Adapter实现仿QQ界面 python实现监控linux性能及进程消耗性能的方法 ajax java 实现自动完成功能 HTML5 语音搜索只需一句代码 使用Python下载Bing图片(代码) JavaScript实现下拉菜单的显示和隐藏 基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据 Extjs中ComboBoxTree实现的下拉框树效果(自写) 迅速确定php多维数组的深度的方法 Opcache导致php-fpm崩溃nginx返回502 Python linecache.getline()读取文件中特定一行的脚本 JS访问SWF的函数用法实例 Python的装饰器用法学习笔记 jQuery实现的调整表格行tr上下顺序 python实现的AES双向对称加密解密与用法分析 AJAX 常用函数创建XMLHTTP对象,区别IE,Mozilla浏览器 springMVC解决ajax请求乱码的三种方法 js中settimeout方法加参数 CSS规则层叠时的优先级算法 JS响应鼠标点击实现两个滑块区间拖动效果 jquery 学习笔记一 利用AJAX实现无刷新数据分页 利用js+css简单实现半透明遮罩弹窗 基于jquery实现多级菜单效果 PHP单例模式与工厂模式详解 php验证身份证号码正确性的函数 php删除与复制文件夹及其文件夹下所有文件的实现代码 layui问题之模拟select点击事件的实例讲解 使用puppeteer破解极验的滑动验证码 JavaScript的Vue.js库入门学习教程 在Ajax中使用get和post所遇到的问题及解决办法 jQuery制作可自定义大小的拼图游戏 个人站长成功创业三要素 Javascript的表单验证-初识正则表达式 如何优化SQL语句的心得浅谈 浅析Mongodb性能优化的相关问题 SyntaxHighlighter自动识别并加载脚本语言 原创 js实现的网页颜色代码表全集 WPF制作一个简单的倒计时器实例附源码 JavaScript基于正则表达式的数字判断函数 JQuery查找DOM节点的方法 php二维数组排序与默认自然排序的方法介绍 详解JavaScript中的属性和特性 一个简单的JS时间控件示例代码(JS时分秒时间控件) Android根据不同身份配置APP对应的不同模块方法 原生js实现简单的链式操作 Oracle CBO优化模式中的5种索引访问方法浅析 HTML复选框和单选框 checkbox和radio事件介绍 Docker多阶段镜像构建的实现 jquery ajax实现文件上传功能实例代码 javascript获取所有同类checkbox选项(实例代码) 彻底搞懂PHP 变量结构体 iOS实现“摇一摇”与“扫一扫”功能示例代码 Android中数据库常见操作实例分析
jQuery图片切换插件gridSlide.zip jQuery图文并茂焦点图代码.zip html5类似百度贴吧涂鸦绘图效果.zip 建筑工程CSS网页模板.zip jQuery微信红包领取动画特效.zip jquery实现3D图片相册展示.zip 仿微信雷达扫描 【PHP源码】Discuz! v4.0 忘忧阁插件版_wygdz4.zip HTML5+CSS3仿Facebook登录表单.zip dubbo+zookeeper+spring -demo jQuery+CSS3波浪形相册展示效果.zip jQuery精简UBB代码编辑器.zip js圆点评分系统样式.zip jQuery鼠标悬停渐变导航.zip 婴儿用品商城网站模板.zip linux命令大全 jQuery鼠标星级打分特效.zip 灰色简洁响应式单页模板.zip 房产经纪公司网页模板下载.zip 【ASP.NET源码】哮喘医院网站_yiyuan.zip jquery万年历日期时间代码.zip 棕色拿着相机拍照网站模板.zip 不含jQ的页面背景切换.zip jQ+CSS3滑块导航菜单.zip jquery大图左右按钮点击切换.zip 微信小程序源码-一个(仿) 微信小程序源码-母婴商店 jQuery网站头部下拉导航.zip 微信小程序源码-美女福利图片 教育培训课程网站模板.zip JQ仿视频播放器图片浏览幻灯片代码.zip jQuery滚动捕捉内容块.zip html5仿京东手机WAP商城网站模板 js腾讯地图api获取坐标位置.zip jquery幻灯片tabs选项卡.zip Java实现愤怒的小鸟AngryBirds游戏 HTML5+CSS动画最佳实战 快递鸟物流查询订阅接口 首页图片浮动焦点图代码.zip 手机APP粉色网站模板.zip css3实现幻灯片切换.zip jquery鼠标划过内容背景滑动切换.zip wordpress企业模板下载.zip 微信小游戏188个 jQuery仿腾讯首页搜索框样式.zip jQuery的垂直可折叠菜单特效.zip 酒店游泳池建造网站模板.zip JS 身体质量指数计算器(BMI) MySQL驱动jar包 HTML5背景分割视差效果代码.zip 简洁大方企业网站模板下载.zip java 智能道路交通信息管理系统的设计与实现 jQuery蘑菇街会员等级显示动画特效.zip jQ带返回顶部右侧悬浮客服.zip Java模拟写字板代码 HTML5 SVG预览图变形切换幻灯片特效.zip jquery表格动态添加删除行代码.zip 爱心公益网站HTML5模板.zip springMVC和mybatis整合,mybatis使用注解模式 jquery分享Love按钮.zip 员工答谢展板PSD素材下载.zip 别墅房地产Bootstrap模板.zip jQuery+CSS3大眼睛萌蛋动画特效.zip jquery纵向幻灯片选项卡.zip 高端酒店装修网站模板.zip css3后台管理面板.zip 安踏jQuery大图幻灯片.zip 高仿淘宝客户端 大气单页集团网站模板.zip jQuery添加删除表单元素代码.zip HTML5 资源源码,近80M资源.20余款手机页面模版源码 ExtAspNet登陆界面 【PHP源码】phpcms2007到phpcms2008 升级 UTF8版_2007_to_2008_utf8.zip jQuery嵌套幻灯片.zip js仿携程网机票城市选择器代码.zip 【PHP源码】梦缘下载系统测试版v1.0_mydown10.zip 机械工业制造公司网站模板.zip HTML5移动端分类筛选菜单代码.zip 机构清爽简洁html模板.zip jQuery折叠式楼层菜单代码.zip 西餐厅美食HTML网站模板.zip 目前市面上最新版本的SHH集成(MYSQL)Demo 【PHP源码】帝国网站管理系统(EmpireCMS) v4.6简体中文版_empirecms46.zip CSS3选项动画切换效果.zip 幼儿园加盟企业官网模板.zip 3D立体手机触屏图片切换代码.zip 十套最新HTML5网站模板 纯CSS3实现超酷扁平风格按钮特效.zip 【PHP源码】Invision Gallery v2.0.5 简体中文语言包_ipg2_chinese_gb.zip 孤独的背景HTML5摄影模板.zip 微信小程序源码-创客+实现大量功能,推荐研究 CSS3墨绿色下拉菜单.zip jquery.mobile demo DragLayout仿QQ侧滑效果 Bootstrap选项卡美化Tabs特效.zip APP源码分享-你最美源码 leomoon-cpu-v 检测电脑是否支持并开启虚拟化技术 中国风CSS网页模板下载.zip 看雪论坛客户端源码 微商洗护品牌化妆品网站模板html源码.zip jQuery鼠标点击切换背景图片代码.zip 大气扁平外贸企业网站模板.zip 漂亮的jquery后台框架 【ASP.NET源码】小牛博客(xiaoniuBlog) v0.1 测试版_xiaoniublog.zip 集装箱运输公司网站模板.zip jQuery动画垂直时间轴特效代码.zip 简易清新的CSS3下拉菜单.zip jquery百度预测焦点图代码.zip 模特摄影公司网站模板.zip jQuery多种切片过渡动画幻灯片代码.zip 微信小程序 - 金盆洗脚城;node后端.zip 质感灰色纹理CSS模板.zip J2EE 电信计费系统完整代码 新网站上线计时模板.zip 光辉画廊CSS网页模板.zip 酒仙网jQ侧栏弹出导航.zip wordpress云时代清爽主题.zip 个人博客html模板下载.zip 新生儿护理培训公司网站模板.zip SpringBoot+maven+idea+Mybatis+Jsp css3 UI按钮设计.zip 天气预报界面小部件模板.zip 【ASP.NET源码】蚂蚁网址导航信息发布程序 v3.5_cndian.zip 基于j2ee的学生档案管理系统 一个非常漂亮的jquery后台框架后台模板 asp.net jQuery左右图片自动滚动特效.zip Zabbix监控环境搭建与配置入门实战视频教程高清版 黄色设计作品展示网页模板.zip CSS3左侧图标菜单点击全屏切换代码.zip 【ASP.NET源码】网络书店 v1.0_bookshopol.zip jQuery带箭头图片折叠轮换.zip 基于SSH框架实现的增删改查实例 css3 Android Logo.zip 大话设计模式(带目录完整版)[中文PDF+源代码] 【PHP源码】冰雪CMS v2.0 Bulid 081020_bxcms.zip jQuery气泡变换图片切换.zip 【ASP.NET源码】带进度条大文件上传源码(单文件多文件都可以传)_uploaddemo.zip 街拍服饰商城网站模板.zip 纯CSS3实现自行车动画.zip maven+spring+spring mvc+mybatis整合实现ssm通用增删改查基础开发框架 圣诞节日CSS网页模板.zip 【PHP源码】废墟のPHP探针v1.3.6a_env.zip jQuery卡通小人走路菜单.zip 纯CSS3实现圆盘时钟动画.zip 可上下左右拖动的jQuery幻灯片.zip Java实现打飞机 jQuery遮罩图片hover翻转效果.zip 【PHP源码】phpMyAdmin v2.9.0.3 For Windows_phpmyadmin-2.9.0.3.zip SSH增删改查+分页+图片上传 jQuery星星评分插件.zip SSH整合项目中容易出现的错误 jQuery导航菜单背景切换特效.zip 铁路蝴蝶花纹模板下载.zip 【PHP源码】Flash投票系统v1.2_flashvote12.zip jQuery全年日历工作考勤表代码.zip Android 解决沉浸式状态栏和华为虚拟按键冲突 css3鼠标悬停图标动画按钮切换.zip 微信小程序源码-新豆瓣同城分类信息小程序 Angular Springmvc Mybatis-master jQuery动态百分比进度加载代码.zip 浅蓝风格HTML业务模板.zip jquery制作精美的评分插件.zip jquery自动滚动切换图片通栏特效.zip 汽车自驾游网站模板下载.zip jQuery多图3D旋转图片轮播.zip redis客户端管理工具 【PHP源码】PHP验证码图片生成程序_sysimg.zip jQuery触摸鼠标双击事件检测代码.zip jQuery日期时间选择器插件.zip 儿童乐园CSS3模板.zip 美食外送订餐网站模板.zip 基于全注解形式配置的简单的ssh项目(maven项目) html5马赛克图片幻灯片.zip spring cloud项目源码 jquery图片放大镜插件.zip 旅游户外个人博客模板.zip 微信小程序源码-多肉植物图鉴 Java 医药管理系统设计源码下载 【手机app订餐 iso7风格之页面向右滑动切换餐饮美食模板】触屏版html5响应式手机app网站模板下载.zip FLAT商务网站HTML5网站模板.zip jQuery叶子Tab选项卡.zip 悬浮滚动网站jquery在线客服.zip jQuery手风琴动画特效插件.zip HTML5砸金蛋手机抽奖活动代码.zip 独特设计Nova主题wordpress.zip jQuery带左右箭头图片滑动特效.zip 【PHP源码】DreamArticle v1.30 UTF-8 Build20080117_dreamarticle_utf-8.zip 【PHP源码】DedeCms v5.1 SP1 GBK Build20080812_dedecmsv51-gbk.zip 粉色约会CSS网页模板.zip before-after左右拖拽分隔条对比图片效果.zip jQuery拖拽放大缩小插件idrag.zip 产品多图展示带放大镜代码.zip jQuery彩色计算器代码.zip Discuz! x2.0糗事百科模板.zip HTML5互动股票图形数据.zip Jsp企业电子商城 jQuery带数字左右按钮控制图片切换.zip jQuery网页动态场景插件jqfloat.zip 微信小程序源码-wechat-weapp-gank-master 万圣节CSS网页模板.zip
举报X