• 简说 call() 、apply() 、bind()


    对于这三个方法,我想一部分人还是比较陌生的。

    所以今天来个简单的介绍~

    我们可以将call()和apply()看作是某个对象的方法,通过调用方法的形式来间接调用函数。call()和apply()的第一个实参是要调用函数的母对象,在函数体内通过this来获得他的引用。

    简单例子:

    function test(){
        return this.x + this.y;
    }
    var o = {x:1,y:2};
    console.log(test.call(o));
    console.log(test.apply(o));

    对于call()来说,第一个调用上下文实参之后的所有实参就是要传入待调用函数的值。

    对于apply()来说,它的实参都放入一个数组当中。

    例:

    function test(x,y){
        return x + y;
    }
    console.log(test.call(this,1,2));
    console.log(test.apply(this,[2,3]));

    我想经过这两个例子,对于call()和apply()这两个方法,应该有个简单的理解了吧。

    bind():主要作用就是将函数绑定至某个对象。如下例所示,当在函数f()上调用bind()方法并传入一个对象o作为参数,这个方法将返回一个新的函数。 调用新的函数将会把原始的函数f()当做o的方法来调用。传入新函数的任何实参都将传入原始函数

    function f(y){return this.x+y}
    var o = {x:1};
    var g = f.bind(o);
    g(2) // =>3

    在ECMAScript 5中的bind()方法不仅仅是将函数绑定至某一个对象,它还附带一些其他作用:除了第一个实参之外,传入bind()的实参也会绑定至this,这个附带的应用是一种常见的函数式编程技术,有时也被称为"柯里化"(哇塞,柯里化,听起来很高大上的赶脚~)

    var sum = function(x,y){return x + y}; //返回两个实参的和值
    //创建一个类似sum的新函数,但this的值绑定到null
    //并且第一个参数绑定到1,这个新的函数期望只传入一个实参
    var succ = sum.bind(null,1);
    succ(2) //=>3 :x绑定到1,并传入2作为实参y
    function f(y,z){return this.x + y +z}; //另外一个做累加计算的函数
    var g = f.bind({x:1},2);
    g(3)  // = >6: this.x绑定到1,y绑定到2,z绑定到3

    OK 就先介绍到这里~

  • 相关阅读:
    “LM/w3svc/1/root /***” 别名已存在
    Dawn of a New Day
    线程池(java.util.concurrent.ThreadPoolExecutor)的使用
    放心走吧,谷歌中国
    实现MySQL允许远程连接
    Google Engineer Gets $6 Million For Not Going To Facebook
    mysql主从同步出现Slave_IO_Running: Connecting的解决思路
    解决eclipse/sts加入@Controller注解后alt+/快捷键的提示功能失效
    Maven异常:Missing artifact org.slf4j:slf4japi:jar:1.7.25以及properties标签作用
    eclipse和sts使用alt+/代码提示,有两个相同的提示
  • 原文地址:https://www.cnblogs.com/showtime813/p/4466105.html
Copyright © 2020-2023  润新知