javascript中this的指向问题和重构forEach方法中第二个参数

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);

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值