zoukankan      html  css  js  c++  java
  • js中闭包来实现bind函数的一段代码的分析

    今天研究了一下bind函数,发现apply和call还可以有这样的妙用,顺便巩固复习了闭包。

     1 var first_object = { 
     2 num: 42 
     3 }; 
     4 var second_object = { 
     5 num: 24 
     6 }; 
     7 function multiply(mult) { 
     8 return this.num * mult; 
     9 } 
    10 Function.prototype.bind = function(obj) { 
    11 var method = this, 
    12 temp = function() { 
    13 return method.apply(obj, arguments); 
    14 }; 
    15 return temp; 
    16 } 
    17 var first_multiply = multiply.bind(first_object); 
    18 first_multiply(5); // returns 42 * 5 
    19 var second_multiply = multiply.bind(second_object); 
    20 second_multiply(5); // returns 24 * 5 

    在以上代码中,实现的最核心其实是

    10 Function.prototype.bind = function(obj) { 
    11 var method = this, 
    12 temp = function() { 
    13 return method.apply(obj, arguments); 
    14 }; 

    这段代码在Function.prototype上添加了一个名为bind的方法,该方法首先保存当前上下文,然后在闭包中使用这个上下文,闭包是一个函数,实现了可以返回保存的上下文和obj上下文相链接,bind方法返回闭包函数,闭包可使用bind方法的上下文,闭包返回的其实是obj的一个方法,这个方法有点特殊,它可以使用obj内部的变量,也可以接受外部传入的变量,所以这个闭包站在了外部和内部作用域的中间,这一切的形成依赖于闭包依赖于method说保存的那个this上下文,其实在下面的实例中,我们可以发现,这个method就是下面的multiply函数的上下文,因为multiply它是Function类(准确的说应该是funtion.prototype原型)的一个实例对象。

  • 相关阅读:
    【Python爬虫】:模拟登录QQ空间
    Docker
    Git
    DevOps
    DevOps
    gRPC 简介
    tcpdump的使用
    Raft
    go-micro 简介
    Node
  • 原文地址:https://www.cnblogs.com/admos/p/4453259.html
Copyright © 2011-2022 走看看