J'ai exécuté des tests dans Firefox 3.6.11, si cela est important, et eval se comporte mal dans le contexte de l'appel et de l'application. Il saute d'une manière ou d'une autre sur l'objet 'this' actuel. Pourquoi?Comment javascript eval gère-t-il 'this'?
dojo.provide("yal-js.tests.javascript");
function evaltest() {
var dis=this;
// it works now... returns 2 on call and apply
return eval("(function() {return this.testValue;}).call(dis);");
// this, however, didn't work: it returned 1, not 2
//return eval("(function() {return this.testValue;})();");
}
function controltest() {
return this.testValue;
}
var testValue=1;
var testObj={testValue: 2};
doh.register("tests.javascript",
new TFRunGroup(
["direct",
function() {doh.assertEqual(1,controltest());} ],
["call",
function() {doh.assertEqual(2, controltest.call(testObj));}],
["apply",
function() {doh.assertEqual(2, controltest.apply(testObj));}],
["eval direct",
function() {doh.assertEqual(1,evaltest());} ],
["eval call",
function() {doh.assertEqual(2, evaltest.call(testObj));}],
["eval apply",
function() {doh.assertEqual(2, evaltest.apply(testObj));}]
));
@Dmitri: Peut-être qu'il croit que 'eval' n'est pas le problème avec votre code. Et s'il vous plaît soyez un peu plus courtois avec les gens qui essaient de vous aider. – Chetan