2012-06-01 104 views
1

我對JavaScript很陌生,所以這個問題聽起來很愚蠢。但是,在變量和函數中替換某些單詞的正確語法是什麼。例如,我有這樣的功能:避免不得不一遍又一遍地寫同一個詞

function posTelegram(p){ 
var data = telegramData; 
$("#hotspotTelegram").css("left", xposTelegram[p] +"px"); 
if (p < data[0] || p > data[1]) { 
$("#hotspotTelegram").hide() 
} else { 
$("#hotspotTelegram").show() 
} 
}; 

有「電報」這個詞重複了很多,我每次做一個新的熱點,我手動插入字中的每一行,以取代「電報」的時間。編寫該代碼的更智能的方法是什麼,以便我只需要寫一次「電報」?

+0

怎麼樣使用帶有自動完成功能的編輯器的緩存結果? – nico

回答

0
var t = "Telegram"; 
var $_tg = $('#hotspotTelegram'); 

$_tg.css("left", "xpos"+t[p] + "px"); // not sure about this line, lol 
$_tg.hide(); 
$_tg.show(); 

+1

儘管這回答了這個問題,但這是不好的做法,因爲它降低了可讀性,並且使代碼更難維護 – nico

1

你不能總是避免這種重複的(這是通用於所有編程語言)。

有時候,你可以讓泛型函數或通用類,例如,一類將嵌入您的所有數據:

Thing = function(key, xpos) { 
    this.$element = $('#hotspot'+key); 
    this.xpos = xpos; 
}; 

Thing.prototype.pos = function (p, data) { 
    this.$element.css("left", this.xpos[p] +"px"); 
    if (p < this.data[0] || p > this.data[1]) { 
     this.$element.hide() 
    } else { 
     this.$element.show() 
    } 
}; 

而且我們可以想像,這可以被稱爲是這樣的:

var telegramThing = new Thing('telegram', xposTelegram); 
... 
telegramThing.pos(p, data); 

但是,如果沒有關於確切問題的更多信息,就很難做出更具體的建議。

我建議您閱讀一些關於OOP和JavaScript的內容,因爲它可以幫助您使複雜的程序更加清晰,簡單並且更易於維護。 例如,使用一個類的東西在這裏將使

  • 沒有定義不止一次「#hotspotTelegram」串更在你的代碼
  • 重用邏輯,並避免犯同樣的代碼與其他的事莫過於「電報」
  • 沒有(通常在另一Thing.js文件)

在主應用程序邏輯的事邏輯,但並不抽象太多,它會產生相反的效果。如果您不使用對象,請嘗試保留有意義的變量名稱。

0

您可以在數據結構,這樣

function posTelegram(p){ 
    var data = telegramData; 
    var $sel = $("#hotspotTelegram"); 

    $sel.css("left", xposTelegram[p] +"px"); 
    if (p < data[0] || p > data[1]) { 
    $sel.hide() 
    } else { 
    $sel.show() 
    } 
}; 
1

分組相似/相關的數據創建一個選擇可變的東西,而不必爲每一個比特變量。

調用jQuery的

使用參數

function posGeneral(p, word){ 

    // Don't have a variable for each of these, make them properties of an object 
    var data = generalDataThing[word].data; 

    // Don't search the DOM for the same thing over and over, use a variable 
    var hotspot = $("#hotspot" + word); 
    hotspot.css("left", generalDataThing[word].xpos[p] +"px"); 

    if (p < data[0] || p > data[1]) { 
    hotspot.hide() 
    } else { 
    hotspot.show() 
    } 
}; 
相關問題