《JavaScript总结》apply、call和bind方法

在JavaScript中,apply、call、bind这个三个方法,它们的做用都是为了改变某个函数运行时的上下文,html

也就是改变函数体内的this指向。数组

在一个函数里,存在“定义时上下文”、“运行时上下文”,并且上下文是能够改变的。app

apply方法函数

apply方法接收两个参数,第一个参数是:“上下文对象” ,第二个参数是:“传入当前执行函数的参数”(第二个参数是数组)。测试

 

        function test(){
            console.log(this.name);
        }
        
        let one = {
            name:'测试1'
        }

        let two = {
            name:'测试2'
        }

        test.apply(one);//将one对象传入函数 这时test函数的上下文是one ,one的name等于'测试1' 因此输出 '测试1'
        test.apply(two);//将two对象传入函数 这时test函数的上下文是two ,two的name等于'测试2' 因此输出 '测试2'    

 

咱们本身封装一个log函数,将传入的参数打印在控制台。this

        function log(){
            var arr = Array.prototype.slice.apply(arguments);
            console.log.apply(console,arr);
        }

        log(1,2,4);    

 

call方法spa

call和apply做用都是同样的,惟一的不一样点是第二个参数,apply的第二个参数是数组,而call的第二个参数的话,看下面例子:prototype

        var arr = [1,2,3];
        Array.prototype.push.call(arr,6,7,8); //参数是一个一个传的
        console.log(arr);//[1, 2, 3, 6, 7, 8]

 

bind方法code

 bind方法和apply、call的做用也是差很少的,不一样的是 apply、call 这两个方法是当即执行函数,而bind不是,来看下面例子:htm

        let one = {
            name:'测试1'
        }
        let two = {
            name:'测试2'
        }

        function sayName(){
            console.log(this.name);
        }

        let play = sayName.bind(one); //这里并不会当即执行
        play(); //因此 能够将这个方法 放到须要的地方 在执行

 

apply、call、bind这三者的区别

相同点:这个三个方法的做用都是改变函数执行上下文。

不一样点:bind是返回对应的函数,便于稍后调用,apply、call方法则是当即执行(当即调用)

 

参考教程:https://www.cnblogs.com/moqiutao/p/7371988.html

相关文章
相关标签/搜索