javascript - 输入 forEach 时变量重置(javascript)

标签 javascript jquery undefined

我的代码出现问题,因为在输入以下 forEach 时“this.items”变量变为未定义。 如您所见,console.log 显示 this.items 如果在 forEach 中重新定义

为什么?

仅供引用,我正在使用 jQuery 1.8 和 Classy(jQuery 类管理器)

extractParams : function(params){

    if(params != ""){
        this.items = {};
        params = params.split("&");
        console.log(this.items);

        params.forEach( function(dts){
        console.log(this.items); // = undefined         
            this.keyval = dts.split("=");
            console.log(this.items);

            switch(keyval[0]){
                case "v" : 
                    this.items["Version number"] = this.keyval[1];
                    params = params.filter(function(v) { return !(v === "v=" + this.keyval[1] );});
                    break;
                case "t1" :
                    console.log(this.item);
                    this.items["Event Type"] = this.keyval[1];
                    params = params.filter(function(v) { return !(v === "t1=" + this.keyval[1] );});
                    break;
                default :
                case "" :
                    break;
            }

            switch(true){
                case regItem.test(keyval[0]):
                    this.items["Product Id n°" + this.keyval[0].match(regexpParamNumber)[1]] = this.keyval[1];
                    params = params.filter(function(v) { return !(v === "i"+this.keyval[0].match(regexpParamNumber)+"=" + this.keyval[1] );});
                    break;
                case regQuantity.test(keyval[0]):
                    this.items["Quantity n°" + keyval[0].match(regexpParamNumber)[1]] = keyval[1];
                    params = params.filter(function(v) { return !(v === "q"+keyval[0].match(regexpParamNumber)+"=" + keyval[1] );});
                    break;
                default :
                case "" :
                    break;
            }

        })
        console.log(result);
        result[0] = detectTrackerType(this.items);  
        show(result);
    }
    return this.items;
}

最佳答案

这是“this”的本质——每次您输入一个函数时,this 都会被重置。

尝试

extractParams : function(params){
var that = this;

然后在整个代码中使用 that

编辑:找到一个值得一读的讨论: What does 'var that = this;' mean in JavaScript?

关于javascript - 输入 forEach 时变量重置(javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12259212/

相关文章:

C 未定义对 InetPtonW 的引用

java - 致命异常 : main Unable to start activity ComponentInfo Caused by java. lang.NullPointerException

JavaScript:innerHTML 输出未定义,尽管 console.log 输出正确的值

javascript - 鼠标拖动后无法仅显示 3 个缩略图

javascript - 为什么我的神经网络训练方法没有被调用? (ML5.JS)

javascript - 基于字符出现的 CSS 选择器?

c# - 使用 JQuery 加载 iframe(正确方法)

javascript - TypeScript 和 ESLint 有重叠的目的吗?

javascript 数组到 mySQL

javascript - 如何在此 html 表中添加带有动态表值的行跨度?