Javascript 无法将项添加到数组中
我试图将项目添加到数组中,但似乎无法实现。如果我没有包含“this.results.push(res)”,结果将显示在我的html页面中,但如果包含它,则不会发生任何事情!你能帮忙吗 这是我拥有的当前代码: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
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)时代码浏览器中的code>将在该行停止,并且不会继续执行后面的字符串<代码>此.results
在该回调函数中未定义(请检查浏览器状态栏中的异常通知)。当您删除该行时,一切正常,$('#results').html(“+res+”ms”)代码>命令在html中显示数据
使用results.push(res)
而不是this.results.push(res)
因为results
变量是全局变量,可用于回调函数。当您包含this.results.push(res)时代码浏览器中的code>将在该行停止,并且不会继续执行后面的字符串<代码>此.results
在该回调函数中未定义(请检查浏览器状态栏中的异常通知)。当您删除该行时,一切正常,$('#results').html(“+res+”ms”)代码>命令在html中显示数据
使用results.push(res)
而不是this.results.push(res)
因为results
变量是全局变量,可用于回调函数。当您包含this.results.push(res)时代码浏览器中的code>将在该行停止,并且不会继续执行后面的字符串<代码>此.results
在该回调函数中未定义(请检查浏览器状态栏中的异常通知)。当您删除该行时,一切正常,$('#results').html(“+res+”ms”)代码>命令在html中显示数据
使用results.push(res)
而不是this.results.push(res)
因为results
变量是全局变量,可用于回调函数。当您包含this.results.push(res)时代码浏览器中的code>将在该行停止,并且不会继续执行后面的字符串<代码>此.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)”的原因