this存在任何地方,不同环境代表不同的含义,取决于调用时的环境
在全局作用域中this指向全局对象window
在全局作用域中this指向全局对象window
console.log(this); // window
在普通函数中this指向全局对象window
function fn() {
console.log(this); //指向window
}
fn();
在对象的方法( 函数 )中this指向当前对象
var obj = {
abs: function () {
console.log(this); //输出{abs: ?}
}
};
事件处理函数中的this指向触发事件的对象-->触发源
lis[0].onclick = function () {
console.log(this); //指向第一个li
}
构造函数中的this指向构造函数的实例化对象
function CreateObj(age){
console.log(this);//this指向该构造函数的实例化对象
this.age = age;
this.work = function () {
console.log('工作去吧');
};
}
// 实例化:
var obj = new CreateObj(38);
console.log(obj);
匿名函数自执行函数this指向全局对象window
(function (a, b) {
console.log(this);//指向window
console.log(a, b);
})(10, 20);
结合上面例子了解this指向问题,并不是一成不变的,可以通过call和apply方法更改this指向
函数.call(this的新指向, ...data); ?参数一个个 用,分隔直接写
var obj = {
name: '张三',
sayName: function () {
console.log(this);//指obj这一对象
console.log(this.name);//张三
}
};
var obj1 = {
name: '李四'
};
obj.sayName.call(obj1); // 李四
函数.apply(this的新指向, [...data]); 第二个参数是一个数组
// apply方法用于求数组最大和最小项
var arr = [32, 43, 546, 56, 32, 534, 234, 65];
console.log(Math.max.apply(this, arr));//546
console.log(Math.min.apply(this, arr));//32
|