2016-01-20 230 views
0

我曾經寫了很多Javascript,現在我只是跳回到它,但似乎我已經失去了我的想法。我正在嘗試使用函數創建一個對象,而且我的做法與我的在線搜索建議我應該這樣做的方式相同。我創建了這個例子來展示我嘗試過的很多方法。Javascript創建對象結構

<script> 
function a(){ 
    function b(){}; 
    this.c = function(){}; 
    this.d = 0; 
    var e = function(){}; 
    var f = 0; 
} 
a.g = function(){}; 
a.prototype.h = function(){}; 

var a2 = function(){ 
    function b(){}; 
    this.c = function(){}; 
    this.d = 0; 
    var e = function(){}; 
    var f = 0; 
} 
a2.g = function(){}; 
a2.prototype.h = function(){}; 
</script> 

從我記得,我應該能夠調用A·B()交流轉換器(),並A.D,同樣爲A2

但是,當我嘗試調用它們時,它不起作用。當我在控制檯中鍵入變量名稱時,它甚至不會將它們顯示爲選項。但我可以撥打a.g()。我不能打電話a.h(),但我可以打電話a.prototype.h()

我在Chrome中嘗試了這一點,在firefox和Safari中也有一些東西。

據我從網上教程可以告訴,這不是我應該期待它的方式相互作用。

回答

2

b,ef是函數a範圍內的變量。他們從不暴露於此功能之外。

cd分配,a被調用,以什麼this是。如果您致電new a(),那麼它將是返回的實例。

ga的財產,所以你可以打電話給它。

h是原型鏈所以它會出現,比如cd,與new創建的a實例。

+0

好的,謝謝。我想我錯過了'新'關鍵字。現在有道理。 –