在javascript中检索正确的“this”

在javascript中检索正确的“this”,javascript,Javascript,我建立了自己的目标: Main.utilities.pool = function (pool) { var counter=0; var $form = $(pool); return { add_pool_field: function(){ $form.find('#practice_type').change(function() { if($(this).find("option:sele

我建立了自己的目标:

Main.utilities.pool = function (pool) {
    var counter=0;
    var $form = $(pool);

    return {
        add_pool_field: function(){
            $form.find('#practice_type').change(function() {
                if($(this).find("option:selected").val()){
                    var time = new Date().getTime();
                    var regexp = new RegExp( $(this).find("option:selected").data('id'), 'g');
                    $("#items").append('<li class="colorize">' + '<h1>' + this.increment_counter() + '</h1>' + $(this).find("option:selected").data('fields').replace(regexp, time) + '</li>');
                }
            });
        },
        increment_counter: function(){
            return ++counter;
        },
        init: function() {
            this.add_pool_field();
        }
    }
}

问题出在更改事件中,这指的是选择字段。但是,我想访问从pool函数返回的实际anynomous对象的increment_counter函数。当我尝试this.increment_计数器时,它认为这是html选择字段,所以它爆炸了。如何在传递给change的函数的上下文中访问该对象?

您需要保留对所需对象的引用,通过其他变量将其声明为变量-

var t = this;
然后在change函数中,在希望访问对象的this的位置使用t。

只需在add\u pool\u字段的本地范围中保存对此的引用


@听着,这是一个仓促的打字错误。是的,我应该自己解决这个问题。传递给change的匿名函数创建一个闭包。这将使包含函数中的所有内容保持在范围内,其中包括局部变量,如self。因此,self现在存储对对象的引用,因此可以在匿名内部函数中使用。
var t = this;
    add_pool_field: function(){
        var self = this;
        $form.find('#practice_type').change(function() {
            if($(this).find("option:selected").val()){
                var time = new Date().getTime();
                var regexp = new RegExp( $(this).find("option:selected").data('id'), 'g');
                $("#items").append('<li class="colorize">' + '<h1>' + self.increment_counter() + '</h1>' + $(this).find("option:selected").data('fields').replace(regexp, time) + '</li>');
            }
        });
    },