this是JavaScript中的一个关键字,不是变量,也不是属性,它不能被赋值。
在绝大多数情况下,它的值取决于函数的调用方式。当然javascript中也有一些方式可以设置this。本文总结下this的指向问题。
函数调用时
这里的函数调用指的是,函数表达式是普通函数,而不是对象的属性。例如 x(a1,a2) 此类。
此时如果是非严格模式,函数中的this就会指向window/全局对象;严格模式时,会是undefined。
function normal() { console.log(this); } // 非严格模式 normal() // window // 严格模式 normal() // undefined 所以,可以使用普通函数中的this关键字来判断当前是否是严格模式
const STRICT = (function(){return !this;}());方法调用时
方法调用指的是函数表达式是对象的属性时。例如:a.x(a1,a2)此类。
此时方法中的this指向调用该方法的对象,函数体中可以通过this引用该对象。
let obj = { name:'zhao', age:18, say: function(){ console.log(this); console.log(this.name); } } obj.say(); // obj // 'zhao'函数say()是作为对象obj的方法调用的,this指向obj
// 对temp赋值 let temp = obj.say; temp(); // window // undefinedtemp赋值后,虽然和
