2013-03-16 68 views
2

http://jsfiddle.net/totszwai/WvbPn/2/爲什麼我的JS對象看不到它自己的函數?

function DialogBox() { 
    this.__DEBUGGING__ = false; 

    DialogBox.debug = function (b) { 
     this.__DEBUGGING__ = b; 
    }; 

    DialogBox.test = function (b) { 
     alert("hello worodl"); 
    }; 
}; 


$(document).ready(function() { 
    dialogbox = new DialogBox(); 
    dialogbox.test(); 
}); 

我想不出我做錯了什麼在那裏。我

DialogBox.prototype.test 
DialogBox.test 
test 

試了一下,我試圖讓這個內部調用自身的功能時,我並不需要把this所有的時間...例如:this.test()

更新: 也有沒有辦法在調用私人函數時不要在任何地方輸入「this」?通常我只寫一次簡單的全局函數,但現在我正在嘗試寫一些不同的東西,並且我將在我的課程中的所有位置調用這些私有函數。所以我試圖避免在任何地方使用「this」...更不用說它使得代碼的可讀性非常糟糕。

就像Java(不是JS)中的例子,你不需要在任何地方輸入「this」。

+1

此外,您提供的示例將對話框放入全局名稱空間。如果不是這樣設計的,請將「var」放在前面。 – tjameson 2013-03-16 01:39:39

回答

4

快速修復:

的對話框定義中,使用this.來定義它的方法:

http://jsfiddle.net/AaronBlenkush/WvbPn/4/

function DialogBox() { 
    this.__DEBUGGING__ = false; 

    this.debug = function (b) { 
     this.__DEBUGGING__ = b; 
    }; 

    this.test = function (b) { 
     alert("hello worodl"); 
    }; 
}; 


$(document).ready(function() { 
    dialogbox = new DialogBox(); 
    dialogbox.test(); 
}); 

對於一個全面的答案:

太過分了以適應StackOverflow答案。

對於這個問題的一個很好的閱讀,請參閱Addy Osmani的書Learning JavaScript Design Patterns,特別是關於構造函數模式的部分和周圍部分。

+1

啊......如何在調試()內調用函數?比如說,調用dialogbox.deubg(),然後調試test()。它有點迫使我使用this.test(),但有點煩人,語法不乾淨...我試過用不同的方式避免在課堂中使用「this」..呃。 – codenamezero 2013-03-16 07:08:48

+0

@codenamezero:**在類構造函數中使用'this'是正確的方法。**我不確定「語法不乾淨」的含義。你可以在你的問題中添加一個新的部分(標題爲「編輯」或「更新」是合適的),如果你想詳細說明:-)我知道這很混亂 - 不熟悉像繼承,多態,封裝等OOP機制?請記住,JavaScript中的所有內容都是一個**對象** - 包括**函數**,這就是爲什麼我們可以使用'this'來引用該函數的*實例*(當以這種方式使用時,我們稱之爲一類**)。 – 2013-03-16 15:17:50

+0

@codenamezero:這裏是一個關於使用「this inside function」的StackOverflow問題的有用答案:http://stackoverflow.com/a/1963390/873263 – 2013-03-16 15:18:56

相關問題