函数的方法:call()、apply()、bind()

72 阅读1分钟

这三个方法都可以用来设置函数体内的this对象的值。 apply()方法接收两个参数:函数内this的值和一个参数数组。第二个参数可以是Array的实例,但也可以是arguments对象。

        function sum(num1, num2) {
            return num1 + num2;
        }

        function callSum1(num1, num2) {
            return sum.apply(this, [num1, num2])
        }

        function callSum2(num1, num2) {
            return sum.apply(this, arguments);
        }
        console.log(callSum1(10, 10)); // 20
        console.log(callSum1(10, 10)); // 20

call()方法与apply()方法的不同之处在于传参的形式不同,call的第一个参数与apply()一样,都是this值,而传给被调用的函数的参数是逐个传递的。

        window.color = 'red';
        let o = {
            color: 'blue'
        };

        function sayColor() {
            console.log(this.color);
        }

        sayColor(); // red

        sayColor.call(this); // red
        sayColor.call(window); // red
        sayColor.call(o); // blue

bind()方法会创建一个新的函数实例,其this值会被绑定到传给bind()的对象。如:

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

        function sayColor() {
            console.log(this.color);
        }
        let objectSayColor = sayColor.bind(o);
        objectSayColor(); // blue