关于this的相关面试题
1.const object={
message:"hello world",
getMessage(){
const message="Hello Earth";
return this.message;
}
}
console.log(object.getMessage());
//问:输出的是 ?
//答:hello world
//因为object.getMessage()是方法调用,所以this是指向的object
2.function pet(name){
this.name=name;
this.getName=()=>this.name;
}
const cat=new pet("Fluffy");
console.log(cat.getName()) //输出是?Fluffy
const{getName}=cat;
console.log(getName()) //输出是?Fluffy
//当一个函数被调用作为构造函数,该构造函数内等于所构造的对象
//this.name=name相当于构造函数在的表达式在构造name对象上创建属性
//而this.getName=()=>this.name在构造函数创建一个方法,
//而且他是一个箭头函数,所以this还是构造函数Pet
3.const object={
message:"hello world",
logMessage(){
console.log(this.message); //输出是?undefined
}
}
setTimeout(object.logMessage,1000)//延迟1秒后
//尽管setTimeout()函数将obgect.logMessage()用作回调函数,
//但它仍是作为常规函数,而不是作为函数调用。
//在常规函数调用中,this作为全局对象的,可以说是指向window。
//那没有声明全局message参数,所以也就说明为什么输出的是undefined。