Javascript 无法将项添加到数组中

Javascript 无法将项添加到数组中,javascript,jquery,Javascript,Jquery,我试图将项目添加到数组中,但似乎无法实现。如果我没有包含“this.results.push(res)”,结果将显示在我的html页面中,但如果包含它,则不会发生任何事情!你能帮忙吗 这是我拥有的当前代码: var results = []; var fun1 = function(str1) { var imag = new Image; var starttimer = new Date().getTime(); $(imag).attr('src', str

我试图将项目添加到数组中,但似乎无法实现。如果我没有包含“this.results.push(res)”,结果将显示在我的html页面中,但如果包含它,则不会发生任何事情!你能帮忙吗

这是我拥有的当前代码:

var results = [];

var fun1 = function(str1) {

    var imag = new Image;
    var starttimer = new Date().getTime();


    $(imag).attr('src', str1 + ':8886/').error(function () {
        var endtimer = new Date().getTime();
        res = (endtimer - starttimer);
        this.results.push(res);
        $('#results').html("" + res + "ms");
    });
}
您需要更改:

this.results.push(res);
致:

您需要更改:

this.results.push(res);
致:

您需要更改:

this.results.push(res);
致:

您需要更改:

this.results.push(res);
致:


当您包括
此.results.push(res)时将在该行停止,并且不会继续执行后面的字符串<代码>此.results
在该回调函数中未定义(请检查浏览器状态栏中的异常通知)。当您删除该行时,一切正常,
$('#results').html(“+res+”ms”)命令在html中显示数据


使用
results.push(res)
而不是
this.results.push(res)
因为
results
变量是全局变量,可用于回调函数。

当您包含
this.results.push(res)时将在该行停止,并且不会继续执行后面的字符串<代码>此.results
在该回调函数中未定义(请检查浏览器状态栏中的异常通知)。当您删除该行时,一切正常,
$('#results').html(“+res+”ms”)命令在html中显示数据


使用
results.push(res)
而不是
this.results.push(res)
因为
results
变量是全局变量,可用于回调函数。

当您包含
this.results.push(res)时将在该行停止,并且不会继续执行后面的字符串<代码>此.results
在该回调函数中未定义(请检查浏览器状态栏中的异常通知)。当您删除该行时,一切正常,
$('#results').html(“+res+”ms”)命令在html中显示数据


使用
results.push(res)
而不是
this.results.push(res)
因为
results
变量是全局变量,可用于回调函数。

当您包含
this.results.push(res)时将在该行停止,并且不会继续执行后面的字符串<代码>此.results
在该回调函数中未定义(请检查浏览器状态栏中的异常通知)。当您删除该行时,一切正常,
$('#results').html(“+res+”ms”)命令在html中显示数据


使用
results.push(res)
而不是
this.results.push(res)因为
results
变量是全局变量,可用于回调函数。

必须使用“results.push(res)”而不是“this.results.push(res)”的原因是“this”的上下文已更改,不再指向全局上下文(在全局上下文下定义了结果数组)。 而是指向触发错误事件的image元素。 另外请注意,“fun1”的“this”上下文将取决于调用对象。若它是在全局范围内调用的,那个么将定义“this.results”,否则它将是未定义的(在fun1的范围内)。此外,这还取决于函数是在“严格”还是“非严格”模式下定义的

假设您有三个不同的映像元素,并且所有函数中都有相同的错误事件处理程序。所有函数中的“this”都将不同。实际上,在每个函数中,“this”将对应于触发错误事件(image1、image2或image3)的DOM元素,正如在注释下所写的那样

另外,我想指出的是,您实际上可以拥有一个有效的错误事件处理程序函数,其中的'this.results'可以工作。要实现这一点,您必须使用“call”、“apply”或“bind”方法调用错误事件处理程序函数,这些方法允许您在函数内部更改此事件的上下文

你可以说:

// define your onError event handler
var onError = function () {
    var endtimer = new Date().getTime();
    res = (endtimer - starttimer);
    this.results.push(res);
    $('#results').html("" + res + "ms");
};

// now call it this way
$(imag).attr('src', str1 + ':8886/').error(onError.bind(this));
当然,使用“this”的这种方式,您无法访问图像属性,因为其上下文已更改(在您的示例中,您没有使用图像属性,因此这里没有任何伤害)

要更好地理解javascript全局和函数上下文,请阅读更多


希望这能有所帮助。

您必须使用“results.push(res)”而不是“this.results.push(res)”的原因是“this”的上下文已更改,不再指向全局上下文(在全局上下文中定义了结果数组)。 而是指向触发错误事件的image元素。 另外请注意,“fun1”的“this”上下文将取决于调用对象。若它是在全局范围内调用的,那个么将定义“this.results”,否则它将是未定义的(在fun1的范围内)。此外,这还取决于函数是在“严格”还是“非严格”模式下定义的

假设您有三个不同的映像元素,并且所有函数中都有相同的错误事件处理程序。所有函数中的“this”都将不同。实际上,在每个函数中,“this”将对应于触发错误事件(image1、image2或image3)的DOM元素,正如在注释下所写的那样

另外,我想指出的是,您实际上可以拥有一个有效的错误事件处理程序函数,其中的'this.results'可以工作。要实现这一点,您必须使用“call”、“apply”或“bind”方法调用错误事件处理程序函数,这些方法允许您在函数内部更改此事件的上下文

你可以说:

// define your onError event handler
var onError = function () {
    var endtimer = new Date().getTime();
    res = (endtimer - starttimer);
    this.results.push(res);
    $('#results').html("" + res + "ms");
};

// now call it this way
$(imag).attr('src', str1 + ':8886/').error(onError.bind(this));
当然,使用“this”的这种方式,您无法访问图像属性,因为其上下文已更改(在您的示例中,您没有使用图像属性,因此这里没有任何伤害)

要更好地理解javascript全局和函数上下文,请阅读更多


希望这能有所帮助。

您必须使用“results.push(res)”的原因