2009-09-24 30 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

相關問題