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原型)的一个实例对象。

  • 相关阅读:
    前端工程师们,这些干货让你开发效率加倍
    我的代码片段
    人生至少有一次为了自己的勇气而活
    美食篇之御桥小聚
    美食篇之好好对自己
    F
    Github 简明教程
    A
    完美字符串
    1222: FJ的字符串 [水题]
  • 原文地址:https://www.cnblogs.com/admos/p/4453259.html
Copyright © 2011-2022 走看看