Javascript:如何从事件回调函数访问对象成员

标签 javascript jquery callback object

我在尝试找出我的对象设计有什么问题时遇到了一些问题。

var comment = function(){
var textarea = null;
$(document).ready( init );

function init()
{
    $('.reply').click( comment.reply_to );
    this.textarea = $('.commentbox textarea');
    console.log( this.textarea );   // properly shows the textarea element
    console.log( textarea );        // outputs null
}

function set_text( the_text )
{
    console.log( textarea );        // outputs null
    console.log( this.textarea );   // outputs undefined
    textarea.val( the_text );
}

return {
    reply_to: function()
    {
        console.log( this );            // outputs the element who fired the event
        set_text( 'a test text' );      // properly gets called.
    }
};
}();

当文档完全加载时,会自动调用 init() 并初始化对象。我必须注意,textarea 成员正确地指向了所需的元素。 单击事件附加到“回复”按钮,因此每当用户单击它时都会调用 reply_to() 函数。

所以,这是我不明白的: * 何时使用“this”是安全的?从 reply_to() 使用它不是,因为上下文似乎设置为调用者元素。 * 为什么我可以从reply_to 调用"set_text()",但我不能访问"textarea"成员? * 我应该如何从 reply_to() 访问“textarea”成员(这是一个事件回调)?

最佳答案

由于在这些处理程序中上下文会发生变化,因此保留对所需上下文的引用是最简单的,我个人更喜欢 self。这是另一种格式:

var comment = function(){
    this.textarea = null;
    var self = this;
    $(document).ready( init );

    function init()
    {
        $('.reply').click( reply_to );
        self.textarea = $('.commentbox textarea');
    }

    function set_text( the_text )
    {
        self.textarea.val( the_text );
    }

    function reply_to() {
      set_text( 'a test text' );
    }
}();

You can test it here .诚然,虽然我不是真的确定您想要完成什么。您正在尝试返回 reply_to 函数,但您自己将其绑定(bind)到 init() 就绪处理程序中...因此您可以立即绑定(bind)它(如上所示),或者更改它并返回您想要在别处绑定(bind)的内容。

关于Javascript:如何从事件回调函数访问对象成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4344287/

相关文章:

javascript - 在ajax文件中同时执行php和javascript

c++ - 调用Lua函数时的LuaBind C++错误处理程序

jquery - CSS 位置已修复,未将标题固定到顶部

javascript - 如何使用jquery为div动态添加点击事件

javascript - javascript中空格后的字符串切片

javascript - 如何从数据表单元格的下拉列表中获取值

javascript - 函数与粗箭头

javascript - 你能等待 javascript 回调吗?

javascript - 如何为文本框设置按钮渐变颜色?

javascript - Webpack React 外部不工作