2016-02-29 84 views
0

如果我這樣做是在JavaScript如何從javascript函數中讀取值?

var A = function() { 
    alert(this.foo); 
}; 
A["foo"] = "bar"; 
A(); 

我希望提醒bar,但我得到了一個未定義,沒有人知道我怎樣才能使這項工作?

感謝

+1

'var A = function(){ alert(this.foo); }; A.prototype.foo =「bar」; var x = new A();' –

回答

1

this值是在該方法被調用(除非你使用的new運營商或東西像callbind)的對象。由於您沒有將該函數作爲方法調用,因此它是默認對象(在瀏覽器中爲window),除非您處於嚴格模式。

對範圍內的功能的唯一參考是A,因此您只能通過alert(A.foo)訪問它。

如果你用了一個名爲函數表達式:

var A = function myFunction() { 

,那麼你將不得不可變myFunction局部範圍到功能,你可以使用,而不是A

0
var A = function() { 
      alert(this.foo); 
     }; 
     A["foo"] = "bar"; 
     A.call(A); 

var A = function() { 

}; 

A.prototype.alert = function() { 
    alert(this.foo); 
} 

var a = new A(); 
a["foo"] = "bar"; 
a.alert(); 
1

this指功能的 「父」 對象,而不是函數本身。表達式A()中沒有父母。爲了「使這項工作」,你必須明確地傳遞A作爲this值:

A.call(A); 

它通常的方式意味着工作是這樣的:

var A = { 
    alert: function() { 
     alert(this.foo); 
    } 
}; 

A.foo = 'bar'; 
A.alert(); 

AA.alert()alert()內被用作this的值。