1.单独使用 nodejs指向{} 浏览器中指向全局对象window
2.在函数内部this指向全局对象 nodejs global 浏览器window
3.在方法中this指向拥有该方法调用者
4.在事件中this指向接收事件的元素
5.显示修改this指向 apply call bind
练习:
var point = {
x : 0,
y : 0,
moveTo : function(x, y) {
// console.log(this,'moveTo')
var moveX = function(x) {
this.x = x;
console.log(this,'movex中this')
};
var moveY = function(y) {
this.y = y;
}
moveX(x);
moveY(y);
}
};
point.moveTo(1, 1); //调用point中moveTo方法传入参数,方法中执行moveX和moveY方法,此时move X中的this指向全局global对象,给global对象中的x赋值为1,moveY同理,所以会打印global对象
console.log(point.x);//打印point对象中的x属性
console.log(point.y);//打印point对象中的y属性
console.log(x);//因为没有定义的全局x变量,所以会寻找global中的x,因为上面已经给x赋值为1,所以打印1
console.log(y);//同理
重构forEach方法时,this指向
Array.prototype.myForEach = function(callback,rest){
for(var i=0;i<arr.length;i++){
// 调用myForeach判断第二个参数是否存在 存在修改this指向 不存在不修改this指向
rest?callback.call(rest,arr[i],i,arr):callback(arr[i],i,arr)
}
}
var arr = [1,2,3,4,5];
arr.myForEach(function(item,index,arr){
console.log(this)
},true);