2013-07-07 63 views
0

嗨我一直在使用JavaScript的原型剛剛開始,我在想,如果有可能,如果是這樣,如何調用一個方法,如內部的功能:方法/函數的JavaScript

obj = function(test){ 
this.test=test; 
} 

obj.prototype.a = function(){ 
    var x = this.test; 

    function b(){ 
     alert(x); 
    } 

    function c(){ 
    console.log(x); 
    } 
} 

var foo = new obj(); 
foo.a.b(); 

所以,我可以在obj.a內部訪問function b,而不需要撥打function c即我想能夠呼叫a並讓它調用其中的兩個功能,但是如果需要,也可以撥打bc

我知道我可以只用a以外的其他方法,但我想我會問這個問題。

乾杯。

+3

提示:即使你只是爲了學習的目的而調整東西,給方法和變量賦予有意義的名稱。 – moonwave99

+0

我已經完成了我的代碼,我只是想保持簡單的問題。乾杯:) –

+0

應該在函數a的末尾有「return this」,這樣foo.a()。b()才能工作? –

回答

2

b作用域爲聲明它的匿名函數。沒有辦法從外部訪問該功能,而無需更改該功能來公開它。

您可以調用a,因爲它是對象原型的屬性(它不存儲在範圍變量中)。 bc根本沒有暴露。您編寫代碼的方式是人們通常在JavaScript中創建私有方法。

+0

謝謝,@Quentin。我只是編輯了這個問題,看看我能改變我寫下它的方式。我可以基本上向方法添加一個方法嗎? –

+0

方法是一個函數。函數是一個對象。對象可以被賦予(或多或少)任意的屬性,所以是(但不是來自函數內部,除非你希望它只在被調用後纔可用)。 'obj.prototype.ab = function(){}' – Quentin

0

你可以改變你的代碼有點使人們有可能,但我懷疑你真正想要的是能夠仍當您從外面呼叫B小的x值......是嗎?

你也許考慮過讓a是另一個實例嗎?我假設你的代碼是不夠重要的,以使這個值得...

+0

...我希望能夠調用'a'並讓它調用其中的兩個函數,但也能夠調用'b'或'如果我需要的話。 –