js闭包中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如何判断浏览器是pc端还是移动端 ?(两种方法)

js中自执行函数进行调用的两种方法

以上就是js闭包中this指向的解决方法(代码)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2742880.html

(0)
上一篇 2025年3月8日 02:55:12
下一篇 2025年3月8日 02:55:20

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • js中闭包性能优化的代码解析

    本篇文章给大家带来的内容是关于js中闭包性能优化的代码解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。     window.onload=function () {        var btn=document.ge…

    编程技术 2025年3月8日
    200
  • js闭包是什么?对js闭包的理解

    js中的闭包是什么?对于初次接触到闭包这个概念的朋友们,我相信很多的朋友都会有点不太理解,接下来的这篇文章将给大家来说一说js闭包该如何理解。 闭包(closure)是js中的一个难点,也是它的特色,很多高级应用都要依靠闭包来实现。所以我们…

    编程技术 2025年3月8日
    200
  • js闭包与作用域链是什么意思?js闭包与作用域链详解

    在学习js过程中会,必定要知道和明白的闭包。闭包是与其他编程语言相比,是js中所特有的一个。以下就是我对于闭包的认识。 闭包的产生:通俗的说,闭包产生于多个函数嵌套之间,当内层函数被保存到外面时,闭包就会产生。【推荐阅读:JavaScrip…

    2025年3月8日 编程技术
    200

发表回复

登录后才能评论