js的this指向 分为以下几种情况
1.全局作用域或者普通函数中this指向全局对象window(在严格模式先此时的this指向undefined)
2.方法调用中 谁调用 this指向谁
3.在构造函数中或者构造函数原型对象中 this 指向构造函数的实例
4.在箭头函数中指向外层作用域的this
5.new一个函数时 this指向新创建出来的对象
强制改变this指向的几种方法
call apply bind 这个三个方法都是可以传参的
区别 :bind不会立即调用,而是返回一个新函数,称为绑定函数,其内的this指向为创建它时传入bind的第一个参数,而传入bind的第二个及以后的参数作为原函数的参数来调用原函数。
apply或call方法,那么this指向他们的第一个参数,apply的第二个参数是一个参数数组,call的第二个及其以后的参数都是数组里面的元素,就是说要全部列举出来;
总结:当我们使用一个函数需要改变this指向的时候才会用到call,apply,bind
如果你要传递的参数不多,则可以使用fn.call(thisObj, arg1, arg2 …)
如果你要传递的参数很多,则可以用数组将参数整理好调用fn.apply(thisObj, [arg1, arg2 …])
如果你想生成一个新的函数长期绑定某个函数给某个对象使用,则可以使用。