美文网首页
call、apply、bind的区别

call、apply、bind的区别

作者: 疯狂的蜗牛Dianna | 来源:发表于2020-05-18 10:25 被阅读0次
    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的注意点: 一旦指向了,就不会再改变了

    相关文章

      网友评论

          本文标题:call、apply、bind的区别

          本文链接:https://www.haomeiwen.com/subject/ttgjohtx.html