zoukankan      html  css  js  c++  java
  • 简说 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 就先介绍到这里~

  • 相关阅读:
    SVN服务器搭建(一)
    排序算法二:冒泡排序
    【LeetCode】136. Single Number
    【LeetCode】217. Contains Duplicate
    【LeetCode】189. Rotate Array
    【LeetCode】122. Best Time to Buy and Sell Stock II
    【LeetCode】26. Remove Duplicates from Sorted Array
    【LeetCode】20. Valid Parentheses
    【LeetCode】680. Valid Palindrome II
    【LeetCode】345. Reverse Vowels of a String
  • 原文地址:https://www.cnblogs.com/showtime813/p/4466105.html
Copyright © 2011-2022 走看看