javascript - 先上代码,关于方法中的嵌套函数有3个问题,高手进。

查看:91
本文介绍了javascript - 先上代码,关于方法中的嵌套函数有3个问题,高手进。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

代码中打印的this是个什么对象?
这段代码能否实现使myNumber.value加1的功能?
在不放弃helper函数的前提下,使用apply、bind或者call方法来改变this指向,具体是选择指向哪个对象?
helper.apply(myNumber);
helper.apply(this);
helper.apply(myNumber.add,[i]); 或其他????

解决方案

    代码中打印的this是个什么对象?

window

    这段代码能否实现使myNumber.value加1的功能?

不能

在不放弃helper函数的前提下,使用apply、bind或者call方法来改变this指向,具体是选择指向哪个对象?
helper.apply(myNumber);
helper.apply(this);
helper.apply(myNumber.add,[i]); 或其他????

helper.apply(this, [i]);
helper.call(this, i);
helper.bind(this)(i);

helper.apply(myNumber, [i]); //this 就是 myNumber

推荐使用bind,修改好的代码如下。

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

另外你的代码可以简化为:

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

这篇关于javascript - 先上代码,关于方法中的嵌套函数有3个问题,高手进。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆