//1普通函数
function find() {
console.log(this);//this指向window
}
find()//Window {parent: Window, opener: null, top: Window, length: 0, frames: Window, …}
//2.构造函数
function Person() {
console.log(this)//this指向构造函数Person
}
var p=new Person();
console.log(p)//Person {}
//3.普通对象
let obj={
name:'tom',
say:function() {
console.log(this);//this指向该调用对象
}
}
obj.say()//{name: “tom”, say: ƒ}
//4.call apply bind 改变this的指向 指向当前调用的对象
//4.1 call
let obj_q={
name:‘jrrey’,
say:function(age,city) {
console.log(this.name,age,city)
}
}
let obj_w={
name:‘li’
}
obj_q.say(20,‘上海’)//jrrey 20 上海
obj_q.say.call(obj_w, 18, ‘武汉’)//li 18 武汉
//4.2 apply
let obj_e={
name:'jerry',
say:function(age,city) {
console.log(this.name,age,city)
},
}
let obj_r={
name:'tom'
}
obj_e.say(21,'北京')//jerry 21 北京
obj_e.say.apply(obj_r,[23,'杭州'])//leson 23 杭州
//4.3 bind 注意:bind它并不是立马执行函数,而是有一个延迟执行的操作,就是生成了一个新的函数,需要你去执行它
let obj_t={
name:'ceshi',
say:function(age,city) {
console.log(this.name,age,city)
},
}
let obj_y={
name:'rop',
}
obj_t.say(23,'恩施')//tom 23 杭州
let bind_tmp= obj_t.say.bind(obj_y,24,'鄂州')
bind_tmp()//rop 24 鄂州