call、apply、bind的区别

2020-05-18  本文已影响0人  疯狂的蜗牛Dianna
call和apply的功能一样
方法调用 + 改变this的指向
// call :函数.call(this的指向,参数列表)
// apply:函数.apply(this的指向,参数数组)
call的用法以及使用场景
        // call : 方法调用  和 改变this指向
        // 结构函数.call();
        function test(){
            console.log(this);
            console.log(arguments);
        };
        // test();
        // test.call();
        // 2.有参数的
        // 结构 : 函数.call(参数1,参数2,,,,)
        // 参数1 this的指向
        // 参数2,参数3作为实参来传递
        var obj = {
            name: '陈银娟'
        };
        test.call(obj,111,222);

        // 场景1 继承
        function Person(){
            this.name = 'cc',
            this.age = '20',
            this.liaomei = function(){
                console.log('扶我起来试试');
            }
        }

        var obj = {};
        Person.call(obj);
        console.log(obj.name);
        console.log(obj.age);
        obj.liaomei();

        // 场景2 方法借用
        var cc = {
            name: '小陈陈',
            age: 90,
            liaomei: function(){
                console.log( this.name + '撩妹');
            }
        }
        // cc.liaomei();
        var ff = {
            name: '肥肥'
        };
        // 方法借用
        // 函数.call(this的指向,实参1,实参2);
        cc.liaomei.call(ff);
        ff.liaomei();

bind只改变this的指向 没有方法调用
        // bind
        // 结构:函数.bind(this的指向,实参1,,,);
        // 作用 : 改变this的指向 但是不会方法调用的功能
        // 返回一个新的函数
        function test(){
            console.log(this);
        }
        // test();
        var ff = {
            name: 'ff'
        };
        // 结果为空
        var f = test.bind(ff);
        f();
        var f = test.bind(ff);
        f();// this=> ff
        var obj = {
            f: f
        };
        // 还是指向的是ff bind的指向一旦改变了 就永远指向ff了
        obj.f();
bind的注意点: 一旦指向了,就不会再改变了
上一篇下一篇

猜你喜欢

热点阅读