关于call,apply,bind和this的再学习
- 在全局环境下,this 始终指向全局对象(window), 无论是否严格模式
- 对象内部方法的this指向调用这些方法的对象
- 原型链中的方法的this仍然指向调用它的对象
- 构造函数中的this与被创建的新对象绑定。
this永远指向最后被调用的对象
改变this指向的方法
- 使用ES6的箭头函数
- 在函数内部搞 let that = this
- 通过call,apply和bind来改变
- 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