【问题标题】:when is 'this' available? [duplicate]“这个”什么时候可用? [复制]
【发布时间】:2014-05-07 14:01:31
【问题描述】:

我有一个 JS 对象在伪代码中这样做:

function myObj {
  // in constructor 
  ... initialise vars
  ... call $.Ajax to fetch view from server

    function AjaxCallBack() {
       // load the DOM with the HTML result
       $('#dialog').html(ajax.result);
       // try to register a change handler
       $("#dialog :input").change(this.formChangeEvent);
    }

    this.formChangeEvent = function(){
        ... do stuff
    }
}

问题是在AjaxCallBack中,'this'不是myObj对象,而是'window'对象,无法解析函数

我能够解决这个问题的唯一方法是让对象的接收者回调到 myObj 的单独函数并注册事件

objInstance = new myObj();
objInstance.registerEventHandler();

我已经尝试了一些其他的东西,但我显然缺少一些基本的东西。

【问题讨论】:

  • 当您遇到实际脚本问题时,为什么要发布伪代码(包括语法错误)?
  • 您能否发布一些有关如何调用 ajaxCallback 的信息,因为这就是神奇之处:)
  • 发布脚本中的所有内容
  • 第 1 课 - 更有效地使用 google 第 2 课 - 我不应该在函数定义 formChangeEvent 前加上“this”。该语法使函数能够被公开访问。通过从声明中删除“this”,我可以将函数设为私有,并且无需使用 this 或 that 即可解析。

标签: javascript jquery


【解决方案1】:

如果我理解您的问题,那么您可以将此保留在任何变量中,例如 var thisObj=$(this) 。现在您可以使用thisObj.formChangeEvent。希望这会有所帮助。

【讨论】:

  • 有些人甚至写var that = this;
【解决方案2】:

试试这个:

function myObj {
  // in constructor 
  ... initialise vars
  ... call $.Ajax to fetch view from server

    var oThis = this; // oThis is object this which points to myObj
    function AjaxCallBack() {
       // load the DOM with the HTML result
       $('#dialog').html(ajax.result);
       // try to register a change handler
       $("#dialog :input").change(oThis.formChangeEvent);
    }

    this.formChangeEvent = function(){
        ... do stuff
    }
}

它会成功的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-29
    • 2013-02-13
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 2014-03-27
    • 2011-09-12
    相关资源
    最近更新 更多