【发布时间】:2010-12-01 03:04:54
【问题描述】:
如何在特定的上下文中执行 JavaScript 函数/一段代码,它会被视为全局上下文?这与更改此(调用/应用)不同,这更像是更改“窗口”。
基本上,如果我有以下代码:
(function() { x.value = 5; return value; })()
有没有办法让它工作(返回 5)而不改变代码本身?
另外,在 x 的上下文中执行代码(如果可能)是我的第一个想法,但也许还有其他解决方案?
更新:
原始问题:我正在尝试使用 selenium 测试书签。 Bookmarklet 假设它可以做
window.SomeObject = {...}; SomeObject.doSomething();
我从页面获取小书签并使用 $selenium.get_eval 执行它,并且在 get_eval 全局对象的上下文中是 selenium 本身的某个对象,而不是窗口。 window.SomeObject 仍然有效,因为 selenium 上下文有窗口,但只是 SomeObject 不起作用。
我想我知道另一种可能的解决方案,但我想知道原始问题是否有答案。
更新 2(解决方案):
最终解决方案(基于 geowa4 的回答):
x = {}; with(x) { return (function() { x.value = 5; return value; })(); }
【问题讨论】:
-
你能解释一下你到底想做什么吗?
-
首先,您设置了
x.value,但只返回value,所以您的代码不会“返回5”。其次,什么? -
在文章末尾添加了解释
-
@crescentfresh 如果 x === 窗口,例如(在普通浏览器上下文中),它会这样做
标签: javascript selenium scope