关于js类中闭包调用this问题

本文详细探讨了JavaScript中的this关键字在不同调用方式下的行为,包括作为对象方法、函数、构造函数调用以及apply或call调用的情况。特别地,文章通过一个闭包调用this的问题,解释了this的指向问题,并提到了解决策略,如使用变量保存this或使用Function.prototype.bind。此外,还涉及了eval方法和回调函数中this的绑定规则。
摘要由CSDN通过智能技术生成

我在封装web控件时遇到一个this调用问题,主要思想是将控件封装成一个js类,但是这个类中某个方法成员中有一个闭包,且该闭包要对此类中的方法进行调用,我直接使用this进行调用失败,先看代码,标红的部分是我已经修改过的,修改前的代码为

createMenu1: function () {
        var xmlHttp = this.createXmlHttp();
        xmlHttp.open("get", "Menu1.xml", true);
        xmlHttp.send(null);

        xmlHttp.onreadystatechange = onReadyStateChange;
        function onReadyStateChange() {
            if (xmlHttp.status == 200 & xmlHttp.readyState == 4) {
                var menu1Xml = xmlHttp.responseXML;
                //JQuery操作实现动态效果
                this.analysisXmlAndCreateHtml(menu1Xml);
               // this.setMenuStyle();
                this.bindAction();
            }
        }
    }

修改后地代码

/*

* 说明:Menu1类,实现菜单的快速创建
* 创建人:  Lixam
* 创建时间:2013-9-10
* 修改人:  
* 修改时间:
*/
var Menu1 = function () { }


Menu1.prototype = {
 
    /*
    * 功能:    创建menu1
    * 参数:    无
    * 返回值:  无
    * 创建人: Lixam
    * 创建时间:2013-9-11
    * 修改人:  
    * 修改时间:
    */
    createMenu1: function () {
        var xmlHttp = this.createXmlHttp();
        xmlHttp.open("get", "Menu1.xml", true);
        xmlHttp.send(null);

        var _this = this;   //缓存this,以便闭包函数调用
        xmlHttp.onreadystatechange = onReadyStateChange;
        function onReadyStateChange() {
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值