这里面$(这个)

时间:2015-05-21 14:48:19

标签: javascript jquery this

我遇到了以下问题:

    function Conclude (thing){
        this.quant = thing.find('#quantity_material').val();
        this.thing = thing;
        this.material =[];
        this.finish = [];
        this.make = function (){
            var i=0;
            this.thing.each(function(){
                this.material [i]= $(this).find('#material_val').val();
                //Conclude.material doesn't work either
                i++;
            });
        }
    }

我想从几个表中分配conclude.material输入值,以便conclude.material[1]从第一个表中获得#material_val的值,依此类推。问题在于,当我写这篇文章时,它并没有引用conclude内的函数.each()

我做错了什么?

2 个答案:

答案 0 :(得分:4)

JS中的每个function语句都有自己的this变量。你有两个函数,一个叫做Conclude,另一个是匿名函数(真的有两个匿名函数,但是我要解释的东西仍然适用)。

您的错误在这里:

this.thing.each(function(){ - > this不属于"属于"到Conclude功能。它属于匿名函数。

最简单的出路,至少对你而言,是改变匿名函数的范围,以便匿名函数中的this引用外部Conclude函数。看到您已使用jQuery,请使用jQuery.proxy方法执行此操作。

代码:

function Conclude (thing){
    this.quant = thing.find('#quantity_material').val();
    this.thing = thing;
    this.material =[];
    this.finish = [];   

    this.make = $.proxy(function (){
        this.thing.each($.proxy(function(index, item){
            this.material[index] = $(item).find('#material_val').val();             

        }, this));
    }, this);
}

答案 1 :(得分:4)

尝试这个,很简单。

     function Conclude (thing){
       var _this = this;
       this.quant = thing.find('#quantity_material').val();
       this.thing = thing;
       this.material =[];
       this.finish = [];
       this.make = function (){
        var i=0;
        this.thing.each(function(){
            _this.material [i]= $(this).find('#material_val').val();

            i++;
        });
    }
}