2009-09-24 26 views
1

如何在特定的上下文中执行JavaScript函数/代码片段,并将其视为全局上下文?这与改变这个(call/apply)不一样,这更像是改变'窗口'。JavaScript:在特定上下文中执行代码

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

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

是有办法使它工作(返回5)在不改变代码本身?

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

UPDATE:

原来的问题:我想测试使用硒书签。小书签假定它可以做

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

我从页面的书签,并使用$ selenium.get_eval执行它,并在get_eval全局对象的背景是自身硒的一些对象,而不是窗户。 window.SomeObject仍然有效,因为硒上下文有窗口,但只是SomeObject不起作用。

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

更新2(解决方案):

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

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

你能解释一下你想要做什么吗? – dusoft 2009-09-24 14:51:20

+0

首先,你设置'x.value',但只返回'value',所以你的代码*不会*返回5。其次,什么? – 2009-09-24 14:53:30

+0

在帖子末尾添加了解释 – 2009-09-24 19:45:08

回答

2

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

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

with关键字将代码块作用于给定对象的作用域。所以在这种情况下,你将返回5.

+0

>不更改代码本身? – 2009-09-24 16:01:44

+1

@crescentfresh:是的,但这是不可能的,所以我选择了最接近的选项。在黑暗中有点刺伤。 – geowa4 2009-09-24 17:28:38

+0

我已经添加了更多的细节问题。随着是一个非常好的主意,但它会在外部范围内工作吗?我会检查。你的规则是 – 2009-09-24 19:48:58

相关问题