ECMAScript5(ES5)中bind方法使用小结

   这篇文章主要介绍了ECMAScript5(ES5)中bind方法使用小结,bind和call以及apply一样,都是可以改变上下文的this指向的,需要的朋友可以参考下

  一直以来对和this有关的东西模糊不清,譬如call、apply等等。这次看到一个和bind有关的笔试题,故记此文以备忘。

  bind和call以及apply一样,都是可以改变上下文的this指向的。不同的是,call和apply一样,直接引用在方法上,而bind绑定this后返回一个方法,但内部核心还是apply。

  直接看例子:

  代码如下:

  var obj = {

  a: 1,

  b: 2,

  getCount: function(c, d) {

  return this.a + this.b + c + d;

  }

  };

  window.a = window.b = 0;

  console.log(obj.getCount(3, 4)); // 10

  var func = obj.getCount;

  console.log(func(3, 4)); // 7

  为何会这样?因为func在上下文中的this是window!bind的存在正是为了改变this指向获取想要的值:

  代码如下:

  var obj = {

  a: 1,

  b: 2,

  getCount: function(c, d) {

  return this.a + this.b + c + d;

  }

  };

  window.a = window.b = 0;

  var func = obj.getCount.bind(obj);

  console.log(func(3, 4)); // 10

  bind是function的一个函数扩展方法,bind以后代码重新绑定了func内部的this指向(obj),但是不兼容ie6~8,兼容代码如下:

  代码如下:

  var obj = {

  a: 1,

  b: 2,

  getCount: function(c, d) {

  return this.a + this.b + c + d;

  }

  };

  Function.prototype.bind = Function.prototype.bind || function(context) {

  var that = this;

  return function() {

  // console.log(arguments); // console [3,4] if ie<6-8>

  return that.apply(context, arguments);

  }

  }

  window.a = window.b = 0;

  var func = obj.getCount.bind(obj);

  console.log(func(3, 4)); // 10

  其实在我看来bind的核心是返回一个未执行的方法,如果直接使用apply或者call:

   代码如下:

  var ans = obj.getCount.apply(obj, [3, 4]);

  console.log(ans); // 10

  无法使用简写的func函数构造,所以用bind传递this指向,再返回一个未执行的方法,实现方式相当巧妙。

时间: 2024-09-20 00:47:28

ECMAScript5(ES5)中bind方法使用小结的相关文章

ECMAScript5(ES5)中bind方法使用小结_基础知识

一直以来对和this有关的东西模糊不清,譬如call.apply等等.这次看到一个和bind有关的笔试题,故记此文以备忘. bind和call以及apply一样,都是可以改变上下文的this指向的.不同的是,call和apply一样,直接引用在方法上,而bind绑定this后返回一个方法,但内部核心还是apply. 直接看例子: 复制代码 代码如下: var obj = {   a: 1,   b: 2,   getCount: function(c, d) {     return this.

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

我们先来看一道题目 var write = document.write; write("hello"); //1.以上代码有什么问题 //2.正确操作是怎样的 不能正确执行,因为write函数丢掉了上下文,此时this的指向global或window对象,导致执行时提示非法调用异常,所以我们需要改变this的指向 正确的方案就是使用 bind/call/apply来改变this指向 bind方法 var write = document.write; write.bind(docum

jQuery中bind()方法用法实例_jquery

本文实例讲述了jQuery中bind()方法用法.分享给大家供大家参考.具体分析如下: 此方法为匹配元素的特定事件绑定事件处理方法. 在语法上bind()方法和one()方法是一样的,它们的不同在于绑定的处理方法的执行次数. 语法结构一: 复制代码 代码如下: $(selector).bind(type,data,function) 参数列表: 参数 描述 type 定义绑定到匹配元素中的事件类型. 如果有多个事件使用空格分隔. data 可选.传递给事件对象的额外数据对象. function

jQuery中 attr() 方法使用小结

  jquery中用attr()方法来获取和设置元素属性,attr是attribute(属性)的缩写,在jQuery DOM操作中会经常用到attr() 定义和用法 attr() 方法设置或返回被选元素的属性值. 根据该方法不同的参数,其工作方式也有所差异. 实例1 设置被选元素的属性和值. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <html> <head> <script type="text/javascript&

jQuery中 attr() 方法使用小结_jquery

定义和用法 attr() 方法设置或返回被选元素的属性值. 根据该方法不同的参数,其工作方式也有所差异. 实例1 设置被选元素的属性和值. <html> <head> <script type="text/javascript" src="/jquery/jquery.js"></script> <script type="text/javascript"> $(document).re

浅谈JS中的bind方法与函数柯里化_javascript技巧

绑定函数bind()最简单的用法是创建一个函数,使这个函数不论怎么调用都有同样的this值.不同于call和apply只是单纯地设置this的值后传参,它还会将所有传入bind()方法中的实参(第一个参数之后的参数)与this一起绑定. 关于这个特性看<JS权威指南>原文的例子: var sum = function(x,y) { return x + y }; var succ = sum.bind(null, 1); //让this指向null,其后的实参也会作为实参传入被绑定的函数sum

javascript中call apply 与 bind方法详解_基础知识

在JavaScript中,call.apply和bind是Function对象自带的三个方法,本文将通过几个场景的应用,来详细理解三个方法. call() call() 方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法. 当调用一个函数时,可以赋值一个不同的 this 对象.this 引用当前对象,即 call 方法的第一个参数. 通过 call 方法,你可以在一个对象上借用另一个对象上的方法,比如Object.prototype.toString.call([]),

js中Function.prototype.bind()方法详解

一. bind的语法 bind 是 ES5 中新增的一个方法,可以改变函数内部的this指向. 1.1 定义 bind()的定义如下: The bind() method creates a new function that, when called, has its this keyword set to the provided value, with a given sequence of arguments preceding any provided when the new fun

在JavaScript中正确引用bind方法的应用

  本文的重点在于讨论bind()方法的实现,在开始讨论bind()的实现之前,我们先来看看bind()方法的使用,有需要的小伙伴可以参考下. 在JavaScript中,方法往往涉及到上下文,也就是this,因此往往不能直接引用,就拿最常见的console.log("info-")来说,避免书写冗长的console,直接用log("info-")代替,不假思索的会想到如下语法: ? 1 2 var log = console.log; log("info-