改变this指向

23 阅读1分钟
 <script>
        'use strict';
        let obj1 = {
            name: 'JAY',
            fn: function () {
                console.log(this);
                console.log(this.name);//输出的就是指向的那个对象的属性
            }
        }
        //1.call()
        obj1.fn(); //obj1
        obj1.fn.call(window);
        obj1.fn.call(new Date());
        let obj2 = {
            name: 'SE'
        }
        obj1.fn.call(obj2);

        //2.apply()
        obj1.fn.apply(obj2);
        obj1.fn.bind(obj2)();
            //  区别:
            //   1. call.apply都是自动执行函数的,bind方法只是返回一个函数,不会执行这个函数,想执行加个()就行
            //   2. 传参的形式不同
             let obj3 = {
                    name: 'JAY',
                    fn: function (age,sex) {
                       
                        console.log(this.name+`今年${age}岁。性别${sex}`);
                    }
                };
                let obj4={
                    name:'QAN'
                };
                //call bind直接写
                obj3.fn.call(obj4,38,'女')
                 obj3.fn.bind(obj4, 38, '女')()
                 obj3.fn.apply(obj4, [38, '女'])
                //apply参数是以数组形式传进去的

                // 箭头函数没有this,是不能改变他的this的
                


    </script>