最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

js闭包中this指向的解决方法(代码)

来源:动视网 责编:小采 时间:2020-11-27 19:32:01
文档

js闭包中this指向的解决方法(代码)

js闭包中this指向的解决方法(代码):本篇文章给大家带来的内容是关于js闭包中this指向的解决方法(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 下面是一个问题,对象方法中定义的子函数,子函数执行时this指向哪里? 三个问题: (1)以下代码中打印的this是个
推荐度:
导读js闭包中this指向的解决方法(代码):本篇文章给大家带来的内容是关于js闭包中this指向的解决方法(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 下面是一个问题,对象方法中定义的子函数,子函数执行时this指向哪里? 三个问题: (1)以下代码中打印的this是个


本篇文章给大家带来的内容是关于js闭包中this指向的解决方法(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

下面是一个问题,对象方法中定义的子函数,子函数执行时this指向哪里?
三个问题:
(1)以下代码中打印的this是个什么对象?
(2)这段代码能否实现使myNumber.value加1的功能?
(3)在不放弃helper函数的前提下,有哪些修改方法可以实现正确的功能?

var myNumber = {
 value: 1,
 add: function(i){
 var helper = function(i){
 console.log(this); 
 this.value += i;
 }
 helper(i);
 }
}
myNumber.add(1);

1.this指向window对象(因为匿名函数的执行具有全局性,所以其this对象指向window);
2.不能实现value加1(每个函数在被调用时都会自动取得两个特殊变量,this和arguments,内部函数在搜索这两个对象时,只会搜索到其活动对象为止,所以不能实现访问外部函数的this对象);
3.修改代码实现正确功能
方法一:

var myNumber={
 value:1,
 add:function(i){
 var that=this;//定义变量that用于保存上层函数的this对象
 var helper=function(i){
 console.log(that);
 that.value+=i;
 }
 helper(i);
 }
}
myNumber.add(1);

方法二:

var myNumber={
 value:1,
 add:function(i){
 var helper=function(i){
 this.value+=i;
 }
 helper.apply(this,[i]);//使用apply改变helper的this对象指向,使其指向myNumber对象
 }
}
myNumber.add(1);

方法三:

var myNumber={
 value:1,
 add:function(i){
 var helper=function(i){
 this.value+=i;
 }.bind(this,i);//使用bind绑定,和apply相似,只是它返回的是对函数的引用,不会立即执行
 helper(i);
 }
}
myNumber.add(1);

文档

js闭包中this指向的解决方法(代码)

js闭包中this指向的解决方法(代码):本篇文章给大家带来的内容是关于js闭包中this指向的解决方法(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 下面是一个问题,对象方法中定义的子函数,子函数执行时this指向哪里? 三个问题: (1)以下代码中打印的this是个
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top