JavaScript:在特定上下文中执行代码

时间:2009-09-24 14:49:44

标签: javascript selenium scope

如何在特定的上下文中执行JavaScript函数/代码段,它将被视为全局上下文?这与更改此(调用/应用)不同,这更像是更改“窗口”。

基本上,如果我有以下代码:

(function() { x.value = 5; return value; })()

有没有办法让它工作(返回5)而不改变代码本身?

另外,在x的上下文中执行代码(如果可能的话)是我的第一个想法,但也许还有其他一些解决方案?

更新

原始问题:我正在尝试使用selenium测试书签。 Bookmarklet假设它可以做到

window.SomeObject = {...}; SomeObject.doSomething();

我从页面获取bookmarklet并使用$ selenium.get_eval执行它,并且在get_eval的上下文中,global对象是selenium本身的一些对象,而不是窗口。 window.SomeObject仍然有效,因为selenium上下文有窗口,但只有SomeObject不起作用。

我想我知道另一种可能的解决方案,但我想知道是否有原始问题的答案。

更新2(解决方案):

最终解决方案(基于geowa4的回答):

x = {}; with(x) { return (function() { x.value = 5; return value; })(); }

1 个答案:

答案 0 :(得分:2)

您可以使用with关键字更改范围。

(function() { x.value = 5; with(x) { return value; })();

with关键字将代码块范围限定为给定对象。所以在这种情况下,你将返回5。

相关问题