如果我執行以下:Javascript/ECMAscript/Spidermonkey:範圍與此?
var scopes = [];
scopes.push(this);
var x = "123";
function foo() {}
(function() {
var y = "456";
function bar() {}
scopes.push(this);
})();
則scopes
對象包含全局對象的兩個相同拷貝,並且兩個foo()
和x
被定義爲全局對象的屬性。
但是y
和bar()
定義在本地範圍內。有什麼方法可以獲得對這個範圍對象的引用嗎?如果沒有,是否有任何方法在該範圍內以編程方式定義對象?
例如,在全球範圍內,我可以做到這一點:
this.wham = "789";
this.baz = function() { return 2; }
var vname = 's';
this[vname] = "Dynamic name!"
,我可以通過wham
和baz()
和s
訪問它們。
如果我有這樣的對象:
var obj = {name: 'ha', value: 3};
我正在尋找一種方式來定義其名稱等於obj.name
等於內容和值的局部範圍變量obj.value
的內容,假定變量obj
在該範圍內可見。
這可能嗎?
編輯:用例如下 -
function define_in(scope, name, value)
{
scope[name] = value;
}
(function() {
define_in(?????, 'x', "super");
var y = x + " powered"; // would like to get "super powered"
})();
我不確定我是否理解你的問題,但要澄清「this」的作用:如果一個函數被稱爲成員函數(例如obj.test()),那麼將爲該對象分配「this」 (在我的例子中是obj)的函數範圍。否則它可能是全局對象,或者如果以嚴格模式運行,可能會引發錯誤。簡而言之,僅僅因爲你處於不同的可變範圍內並不一定意味着「this」將指向當前範圍。 – Sahand 2012-04-02 16:56:10
darnit,這是重複的。我試圖尋找它,我真的這樣做。 – 2012-04-02 16:57:48
[JavaScript:引用函數作爲對象的本地作用域]的可能重複(http://stackoverflow.com/questions/2600361/javascript-reference-a-functions-local-scope-as-an-object) – 2012-04-02 16:58:05