在javascript中检索正确的“this”

时间:2014-10-29 19:46:18

标签: 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: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();
        }
    }
}

我称之为:

var $profile_pool = Main.utilities.pool($('#new_form')).init();

问题在于更改事件,这是指选择字段。但是,我想访问从池函数返回的实际anynomous对象的increment_counter函数。当我尝试this.increment_counter()时,它认为这是html选择字段,因此它会爆炸。如何在传递给change的函数的上下文中获得对该对象的访问权限?

2 个答案:

答案 0 :(得分:1)

只需在this的本地范围内保存对add_pool_field()的引用。

    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>');
            }
        });
    },

答案 1 :(得分:0)

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

var t = this;

然后在更改功能中,使用t您想要访问对象的this