bind() 理解 【转】
bind()可稍后执行 call() apply()
为了搞清这个陌生又熟悉的bind,google一下,发现javascript1.8.5版本中原生实现了此方法,目前IE9+,ff4+,chrome7+支持此方法,opera和safari不支持(MDN上的说明)。
bind的作用和apply,call类似都是改变函数的execute context,也就是 runtime 时 this 关键字的指向。但是使用方法略有不同。一个函数进行bind后可稍后执行。
bind 方法实现:绑定this 和 “科里化”:
function getConfig(colors,size,otherOptions){
console.log(colors,size,otherOptions)
}
var defaultConfig = getConfig.bind(null,"#f00","1024*768");
defaultConfig("123"); //#f00 1024*768 123
defaultConfig("345"); //#f00 1024*768 345
因为bind 方法是EMS5 以后提出的方法,对于老的浏览器,可以使用手写一个bind 方法
if(!Function.prototype.bind){
Function.prototype.bind = function(oThis){
if(typeOf this !== 'function'){
throw new TypeError('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?this:oThis,
aArgs.concat(Array.prototype.slice.call(arguments)))
}
fNOP.prototype = this.prototype;
fBound.prototype = new fNOP();
return fBound;
}
}
转载于:https://www.cnblogs.com/baota/p/6738562.html
bind() 理解 【转】相关推荐
- react 类暴露_react如何将组件内部的方法暴露给外部
最近在项目中遇到一个问题,就是需要在类的外部调用操作类内部的方法. 举个例子,我有一个Toast组件,在外部需要调用它的show方法来控制他的显隐状态. 之前我的写法是写一个静态类方法,然后在cons ...
- JavaScript中的call、apply、bind深入理解
一.函数的三种角色 首先要先了解在函数本身会有一些自己的属性,比如: length:形参的个数: name:函数名: prototype:类的原型,在原型上定义的方法都是当前这个类的实例的公有方法: ...
- bind()、call()、apply()理解及用法
apply和call都是为了改变某个函数运行时的上下文而存在的(就是为了改变函数内部this的指向),Function对象的方法,每个函数都能调用: 使用apply或call方法,其运行的上下文指向第 ...
- 深入理解this和call、bind、apply对this的影响及用法
首先看一道网易的面试题: var a = {a:"haha",getA:function(){console.log(this.a);} } var b = {a:"he ...
- 深入理解call、apply、bind(改变函数中的this指向)
在JavaScript中call.apply.bind是Function 对象自带的三个方法,这三个方法的主要作用是改变函数中的 this 指向,从而可以达到`接花移木`的效果.本文将对这三个方法进行 ...
- 网络编程之 字节序和深入理解bind()函数
在上一篇博客里,大家也许会对htons()感到疑惑吧,其实就是字节序的转换,所以这篇博客我们就来详细的解释一下什么是字节序. 也就是让大家对 bind函数有更加深刻而性感的认识 计算机是小端字节序,网 ...
- javascript的bind方法绑定深入理解
一.方法介绍function.bind(thisArg[,arg1[,arg2[,argN]]])1.方法绑定在thisArg对象上.2.可以绑定参数,用于返回值方法的下一步参数 var checkN ...
- REBOL 中 Bind 的理解
Rebol文档中的Bind的定义如下: Bind words to a special context. Binds meaning to words in a block. That is, it ...
- 理解 call、apply、bind 原理,手写简单的 call、apply、bind 方法
理解 call.apply.bind 原理,手写简单的 call.apply.bind 方法 call 原理及实现 MDN定义:call()方法使用给定的 this 值和单独提供的参数调用函数. 用自 ...
最新文章
- android 解决Error:This Gradle plugin requires a newer IDE able to request IDE model level 3. For Andro
- SICP 之斐波那契数
- ajax反序列化出错,将数据从jquery ajax请求传递给wcf服务失败了反序列化?
- asp.net core使用serilog将日志推送到腾讯云日志服务
- h5 android数字键盘,【笔记】移动端H5数字键盘input type=number的处理(IOS和Android)...
- JVM内存模型和类加载运行机制
- linux下查看mysql配置文件位置
- 高速PCB设计怎么布局,资深工程师透露了其中的秘密,都是干货
- matplotlib设置x轴和y轴 设置
- NW.js之基础篇(2)
- 农场周围的道路c语言编程,[蓝桥杯][2013年第四届真题]农场阳光 (C语言)
- [OpenGL]导入obj文件
- Git使用 从入门到入土 收藏吃灰系列 (九) git reset 移除暂存区与版本回退
- VUE 物理返回键的处理
- 一夜成名的航班追踪网站,什么来头?
- JSTL标签不起作用,JSTL标签直接输出表达式
- RaspberryPi 3B 之初体验笔记(续一)
- 人手必备,策略中最常用的5类Python数据接口
- JSP程序+tomcat服务器如何禁止客户端访问非页面形式路径
- 【亚马逊运营】几点选品的建议卖家们都注意了吗?
热门文章
- 面试了一个31岁程序员,让我有所触动
- matlab离散傅里叶逆变换,手动实现离散傅里叶正变换与逆变换(程序+例子)
- opencv画线和文字
- api postmain 鉴权_认证鉴权与API权限控制在微服务架构中的设计与实现(一)
- android 访问web.py,Appium 测试 Android 时,python 用例调用 Webdriver.remote 后无回应
- python 微信机器人教程_Python实现微信机器人的方法
- 百面机器学习 #2 模型评估:07 过拟合和欠拟合及其常用解决方法
- 在ASP.NET中面向对象的编程思想
- 关于js的引用类型和基本类型
- Intel安装框架爆出带本地提权的任意代码执行漏洞CVE-2017-5688