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() 理解 【转】相关推荐

  1. react 类暴露_react如何将组件内部的方法暴露给外部

    最近在项目中遇到一个问题,就是需要在类的外部调用操作类内部的方法. 举个例子,我有一个Toast组件,在外部需要调用它的show方法来控制他的显隐状态. 之前我的写法是写一个静态类方法,然后在cons ...

  2. JavaScript中的call、apply、bind深入理解

    一.函数的三种角色 首先要先了解在函数本身会有一些自己的属性,比如: length:形参的个数: name:函数名: prototype:类的原型,在原型上定义的方法都是当前这个类的实例的公有方法: ...

  3. bind()、call()、apply()理解及用法

    apply和call都是为了改变某个函数运行时的上下文而存在的(就是为了改变函数内部this的指向),Function对象的方法,每个函数都能调用: 使用apply或call方法,其运行的上下文指向第 ...

  4. 深入理解this和call、bind、apply对this的影响及用法

    首先看一道网易的面试题: var a = {a:"haha",getA:function(){console.log(this.a);} } var b = {a:"he ...

  5. 深入理解call、apply、bind(改变函数中的this指向)

    在JavaScript中call.apply.bind是Function 对象自带的三个方法,这三个方法的主要作用是改变函数中的 this 指向,从而可以达到`接花移木`的效果.本文将对这三个方法进行 ...

  6. 网络编程之 字节序和深入理解bind()函数

    在上一篇博客里,大家也许会对htons()感到疑惑吧,其实就是字节序的转换,所以这篇博客我们就来详细的解释一下什么是字节序. 也就是让大家对 bind函数有更加深刻而性感的认识 计算机是小端字节序,网 ...

  7. javascript的bind方法绑定深入理解

    一.方法介绍function.bind(thisArg[,arg1[,arg2[,argN]]])1.方法绑定在thisArg对象上.2.可以绑定参数,用于返回值方法的下一步参数 var checkN ...

  8. REBOL 中 Bind 的理解

    Rebol文档中的Bind的定义如下: Bind words to a special context. Binds meaning to words in a block. That is, it ...

  9. 理解 call、apply、bind 原理,手写简单的 call、apply、bind 方法

    理解 call.apply.bind 原理,手写简单的 call.apply.bind 方法 call 原理及实现 MDN定义:call()方法使用给定的 this 值和单独提供的参数调用函数. 用自 ...

最新文章

  1. android 解决Error:This Gradle plugin requires a newer IDE able to request IDE model level 3. For Andro
  2. SICP 之斐波那契数
  3. ajax反序列化出错,将数据从jquery ajax请求传递给wcf服务失败了反序列化?
  4. asp.net core使用serilog将日志推送到腾讯云日志服务
  5. h5 android数字键盘,【笔记】移动端H5数字键盘input type=number的处理(IOS和Android)...
  6. JVM内存模型和类加载运行机制
  7. linux下查看mysql配置文件位置
  8. 高速PCB设计怎么布局,资深工程师透露了其中的秘密,都是干货
  9. matplotlib设置x轴和y轴 设置
  10. NW.js之基础篇(2)
  11. 农场周围的道路c语言编程,[蓝桥杯][2013年第四届真题]农场阳光 (C语言)
  12. [OpenGL]导入obj文件
  13. Git使用 从入门到入土 收藏吃灰系列 (九) git reset 移除暂存区与版本回退
  14. VUE 物理返回键的处理
  15. 一夜成名的航班追踪网站,什么来头?
  16. JSTL标签不起作用,JSTL标签直接输出表达式
  17. RaspberryPi 3B 之初体验笔记(续一)
  18. 人手必备,策略中最常用的5类Python数据接口
  19. JSP程序+tomcat服务器如何禁止客户端访问非页面形式路径
  20. 【亚马逊运营】几点选品的建议卖家们都注意了吗?

热门文章

  1. 面试了一个31岁程序员,让我有所触动
  2. matlab离散傅里叶逆变换,手动实现离散傅里叶正变换与逆变换(程序+例子)
  3. opencv画线和文字
  4. api postmain 鉴权_认证鉴权与API权限控制在微服务架构中的设计与实现(一)
  5. android 访问web.py,Appium 测试 Android 时,python 用例调用 Webdriver.remote 后无回应
  6. python 微信机器人教程_Python实现微信机器人的方法
  7. 百面机器学习 #2 模型评估:07 过拟合和欠拟合及其常用解决方法
  8. 在ASP.NET中面向对象的编程思想
  9. 关于js的引用类型和基本类型
  10. Intel安装框架爆出带本地提权的任意代码执行漏洞CVE-2017-5688