美文网首页
理解bind()绑定

理解bind()绑定

作者: 达摩会武术 | 来源:发表于2019-01-16 09:54 被阅读0次

ECMA5Script5定义了一个方法:bind();这个方法会创建一个函数的实例,其this值会被绑定到传给bind()函数的值。

        window.color = "red";
        var o = { color: "blue" };

        function sayColor(){
            alert(this.color);
        }
        var objectSayColor = sayColor.bind(o);
        objectSayColor();   //blue

sayColor()调用了bind()并传入对象o,创建了objectSayColor()函数;
objectSayColor()的this值等于o,因此即使在全局作用域中调用这个函数,也会看到"blue";


bind() 最简单的用法是创建一个函数,不论怎么调用,这个函数都有同样的 this 值。JavaScript新手经常犯的一个错误是将一个方法从对象中拿出来,然后再调用,期望方法中的 this 是原来的对象(比如在回调中传入这个方法)。如果不做特殊处理的话,一般会丢失原来的对象(可以对比react中this有时候会指向undefined的问题)。基于这个函数,用原始的对象创建一个绑定函数,巧妙地解决了这个问题:

this.x = 9;    // 在浏览器中,this指向全局的 "window" 对象
var module = {
  x: 81,
  getX: function() { return this.x; }
};

module.getX(); // 81

var retrieveX = module.getX;
retrieveX();   
// 返回9 - 因为函数是在全局作用域中调用的

// 创建一个新函数,把 'this' 绑定到 module 对象
// 新手可能会将全局变量 x 与 module 的属性 x 混淆
var boundGetX = retrieveX.bind(module);
boundGetX(); // 81

相关文章

  • 理解bind()绑定

    ECMA5Script5定义了一个方法:bind();这个方法会创建一个函数的实例,其this值会被绑定到传给bi...

  • vue03

    v-bind动态绑定class(对象语法) v-bind动态绑定class(数组语法) v-bind动态绑定sty...

  • jQuery(3)

    一 事件绑定 绑定 $().bind(事件类型,function(){}); $().bind(事件类型1,事件类...

  • React事件绑定

    1、在构造函数内使用bind绑定this 2、箭头函数绑定this 3、使用bind()绑定this 4、使用箭头...

  • 2018-09-16练习与复习

    v-bind绑定属性; v-bind:“属性名”v-bind:的简写(:)列 v-bind小项目 v-on:绑定事...

  • Vue.js 笔记

    v-bind:绑定属性 v-bind绑定属性,v-bind:属性名=‘值’,v-bind :属性名=‘值’ v-m...

  • MachO动态库绑定过程详解

    动态库绑定过程详解 首先动态库绑定分为lazy bind 和no_lazy_bind,lazy bind 主要用于...

  • 2、数据绑定

    v-model双向绑定v-bind单向绑定 v-model双向绑定的例子 运行结果a.png 使用v-bind绑定...

  • First 数据绑定

    v-model双向绑定v-bind单向绑定 v-model双向绑定的例子 运行结果a.png 使用v-bind绑定...

  • 6 动态绑定属性

    v-bind基本用法 v-bind 绑定style 动态绑定class对象语法···...

网友评论

      本文标题:理解bind()绑定

      本文链接:https://www.haomeiwen.com/subject/djjxdqtx.html