1.基础this
// 如果一个标准函数,非箭头函数
// 作为某个对象的方法被调用时,
// 这个this指向的是调用函数的对象
function print() {
console.log(this);
}
let obj = {
name: '张三'
}
obj.print = print;
obj.print()//{name:'张三',print:f}
//此时this指向obj对象,函数被哪个对象调用了,就指向哪个对象
let obj2={
age:20
}
obj2.print=print;
obj2.print()//{age:20,print:f}
2.进阶箭头函数
// 在全局环境下定义的函数,this指的是window
let print=()=>{
console.log(this);
}
let a={
number:1
}
a.print=print;
a.print()//window
但是箭头函数的this不一定全都指向window而是指向调用这个函数对象的外层对象
3.改变this指向
// 强行改变this指向
function print(){
console.log(this);
}
let obj={
number:1
}
obj.print=print;
obj.print()//{number:1,print:f}
let obj2={
Boolean:true
}
obj.print.call(obj2)//{Boolean:true}
obj.print.apply(obj2)//{Boolean:true}
obj.print.bind(obj2)()//{Boolean:true}
4.构造函数的this
指向实例对象
function Person(name){
this.name=name
console.log(this);
}
let print=new Person('张三')//{name:'张三'}
console.log(print);//{name:'张三'}