这里面 $(this)

This inside $(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++;
            });
        }
    }

我想从几个 table 中分配 conclude.material 一个输入的值,这样 conclude.material[1] 就是第一个 table 的 #material_val 的值] 等等。问题是当我写这个的时候,它没有引用 .each().

里面的函数 conclude

我做错了什么?

JS 中的每个 function 语句都有自己的 this 变量。您有两个函数,一个称为 Conclude,另一个是匿名函数(实际上有两个匿名函数,但我要解释的内容仍然适用)。

你的错误在这里:

this.thing.each(function(){ -> this 没有 "belong" 到 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);
}

试试这个,很简单。

     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++;
        });
    }
}