3月14日凌晨学习记录

71 阅读1分钟

关于call,apply,bind和this的再学习

  1. 在全局环境下,this 始终指向全局对象(window), 无论是否严格模式
  2. 对象内部方法的this指向调用这些方法的对象
  3. 原型链中的方法的this仍然指向调用它的对象
  4. 构造函数中的this与被创建的新对象绑定。

this永远指向最后被调用的对象

改变this指向的方法
  1. 使用ES6的箭头函数
  2. 在函数内部搞 let that = this
  3. 通过call,apply和bind来改变
  4. new一个对象
call与apply

函数执行时test()相当于test.call() call()里可以传对象,来改变函数内部的this指向 如果函数需要参数,name就在call()括号里边加上 apply和call用法相似,不同的是call向函数里传递是实参的时候要按照形参的个数穿进去,apply传递实参的时候则是传递一个数组或者类数组,像arguments。 示例代码:

        name : "Cherry",
        fn : function (a,b) {
            console.log( a + b)
        }
    }

    var b = a.fn;
    b.apply(a,[1,2])     // 3
        name : "Cherry",
        fn : function (a,b) {
            console.log( a + b)
        }
    }

    var b = a.fn;
    b.call(a,1,2)       // 3

相对于call和apply bind的。用法则不太相同,bind()创造了一个函数,当被调用的时候,将this指向设置为提供的值。也就是说bind创造了一个函数,我们需要手动调用 就像test==>test()一样 示例代码:

        name : "Cherry",
        fn : function (a,b) {
            console.log( a + b)
        }
    }

    var b = a.fn;
    b.bind(a,1,2)()           // 3