目录
箭头函数
箭头函数的this指向宿主对象
方法中的this指向当前对象
let obj = {
name: 'zs',
say() {
// console.log(this);
// 箭头函数的this指向上级作用域(obj对象)或者说宿主对象
let fn1 = () => {
console.log(this, 'fn1');
}
function fn2() {
console.log(this, 'fn2');
}
fn1();
fn2();
}
}
obj.say();
call与apply
call
1.是函数的方法
2.fn.call(obj,arg1,arg2,...)
调用fn这个函数,并且 会改变fn执行的时候的this 为 obj,剩余的参数 会作为 实参 传入 fn 内部,arg1,arg2...
apply
1.是函数的方法
2.fn.apply(obj,[arg1,arg2,...])
调用fn这个函数,
第一个参数 改变this ,会改变fn执行的时候的this 为 obj,第二个参数 会作为 实参 传入 fn 内部,arg1,arg2...
bind (给一个函数绑定this)
bind(对象,参数1,参数2) 返回一个新的函数,改变新函数中this的指向为bind的第一个参数、第二三及以后的参数,给函数传递实参
1.是函数的方法
2.let resFn = fn.bind(obj)
不会调用fn函数,不会影响原函数fn里面的this,返回一个新函数resFn;第一个参数的值会改变 新函数resFn调用的时候的this;resFn 和 fn 内的代码是一样
function fn() {
let info = '哲学是什么?认识世界,认识事物的方法...'
console.log(this);
}
// fn();//window
let obj = {
name: '刘亦菲'
}
// fn 调用bind 返回新函数 fn1,fn1的函数体是克隆自fn,而fn1中的this指向obj
let fn1 = fn.bind(obj);
// console.log(fn1);
// console.log(fn == fn1); // false
// fn1(); // {name: "刘亦菲"}
bind() 改变this指向的时候,顺便传递参数,克隆的函数,不接受参数