我是一名熟練的C/C++程序員,他必須在JavaScript中實現Firefox擴展(對我而言,這是一種令人不快,不直觀的語言)。我有擴展基礎工作,但現在我需要將我所有的全局變量和函數放到一個名稱空間中,以確保我的變量名或函數名不會與任何過去/現在/將來的全局/窗口對象中可能存在的名稱衝突,或者在另一個擴展中。函數可以在javascript中單獨聲明和定義(創建Firefox擴展)?
用我的全局變量創建一個名稱空間對象看起來簡單而直接,並且工作正常。
我無法理解的是如何將我的函數的聲明放入名稱空間對象中,然後在名稱空間對象聲明下實現所有這些函數。這可以用一些合理的乾淨語法來完成......像下面這樣的東西?
//
// declare namespace
//
var mynamespace = {
varname00: value,
varname01: value,
varname02: value,
function: funcname00(),
function: funcname01(number),
function: funcname02(number, string),
};
//
// define functions
//
mynamespace.funcname00() {
return (23);
}
mynamespace.funcname01(number) {
return (number * number);
}
mynamespace.funcname02(number, string) {
econsole.logStringMessage("funcname02() : " + string + number);
return (number);
}
注意:我的目標不是棘手或高級的 - 恰恰相反!我正在尋找一種能夠儘可能直觀地感受C程序員的技術!因此我更喜歡:
1:在頂部只創建一個聲明變量和函數的名稱空間對象的小聲明。
2:在全局名稱空間對象之外實現函數。
由於JavaScript語法規則完全混淆,我猜測javascript可能會讓我插入命名空間對象聲明中的所有函數定義/實現。對我來說這很糟糕,但如果這是唯一可行的方式,我必須忍受這一點。但對我個人來說,擁有一個如此巨大的區塊幷包含「一切」是非常重要的,所以如果可能的話,我寧願避免這樣做。
注意:這不是徵求關於程序風格的意見 - 完全相反。我只想知道實際上與我在上面示例中展示的傳統C語法/佈局最相似的JavaScript語法。如果與我的示例最接近的javascript語法/佈局在某種程度上緩慢,低效或功能有問題,我很樂意提供有關執行效率的評論。謝謝。
有沒有這樣的概念,如JavaScript函數原型。函數是同時聲明和實現的。您最初可以在工作空間中將一些屬性設置爲「null」,並稍後將函數分配給它們,但語義仍然不同。 – 2013-02-20 08:55:02
a)JS不需要類型簽名聲明,也沒有名稱空間聲明b)「名稱空間」只是具有屬性的對象,您需要爲其分配函數(或在對象文本中正確定義它們)。 – Bergi 2013-02-20 08:57:00
從上面的註釋中可以看出,雖然JavaScript沒有「函數原型或聲明」,但是存在一些可行的語法,它們會對我的示例進行分類。那是對的嗎?語法是什麼樣的? – honestann 2013-02-20 09:06:24