2010-10-09 44 views
0

比方說,我想創建一個名爲「頂點」的對象。如何用已定義的變量和函數創建JavaScript對象?

public class Vertex { 

    // member variables 
    public data; 
    private id; 

    // member methods 
    public Vertex() { /* default constructor */ } 
    public getID() { return id; } 
} 

現在,我會怎麼做,在JavaScript的:通常情況下,在Java中我會做這個的?我想保留私人還是公共?這是我迄今爲止設置的內容,但我認爲它不對,我從來沒有在JavaScript中處理過OOP。

/** 
* Vertex constructor. 
*/ 
function Vertex(object) { 

    data = object; 
    id = object.getCode(); // each Vertex will have a unique id which will be the city code 
}; 
Vertex.prototype = (function() { 
    // Private Members here 

    // Public Members inside return 
    return { 
    constructor : Vertex, 

    getID : function() { 

     return (id); 
    } 
}; 

我對原型並不熟悉,但我正在努力學習。這是正確的方法嗎?如果不是這樣,我基本上就是試圖完成上面的Java代碼,但是通過JavaScript來完成。

+0

可能的重複:http://stackoverflow.com/questions/55611/javascript-private-methods – 2010-10-09 06:37:29

+0

@David,我看過那篇文章...我想我模仿它正確,但我要問的原因是因爲當我將我的頂點對象打印到FireBug控制檯時,它不顯示任何值...所以我不認爲該對象是正確的。 – Hristo 2010-10-09 06:40:28

+0

在這裏快速提示,你的'默認構造函數'是沒用的,JS中沒有重載。 – 2010-10-09 16:15:44

回答

2

有很多,許多方法可以使類/實例系統類似於你使用其他語言的東西,出JavaScript的執行好奇原型的。沒有任何一種人人都可以接受的方式,並且爲了方便和性能,可能需要進行大量權衡。有關不同常見類/實例模型的討論,請參閱this question

雖然你可以重現(主要)私人變量通過使用閉包,我強烈建議不要。通過將Java的權限模型引入JavaScript,您幾乎沒有什麼收穫。

Java需要私有成員作爲其安全模型的一部分來執行。但是JavaScript沒有頁面內安全邊界的模型,所以你不能保護你的代碼免受任何人的濫用,除了你自己。所有'真正的私人'將爲你做的是快速調試和原型製作工作有點困難。

請考慮使用榮譽系統模型(如在Python中)。使用下劃線前綴'僞私人'成員表示不應從外部訪問這些成員。

0

您可以使用JSDoc向您的變量和函數添加元信息(如私人成員資格)。諸如Google closure編譯器之類的工具可以使用此元信息來檢查您的代碼是否對這些成員進行非法訪問。 (以及許多其他的東西)

相關問題