我正在自己的插件上工作。它生成表格divs和椅子divs並將椅子分組到表格divs。創建椅子是在表函數內的一個函數中完成的,但這不是一個好習慣,因爲插件通常包含單獨的函數。分離嵌套功能
雖然我想讓椅子可選,這意味着代碼將正常工作,並報告沒有錯誤。但是我不能將桌椅功能放在桌子外面,並且不會出錯。我可能會以錯誤的方式去思考?我需要改變什麼?
function createTables() {
var availableTables = [],
newTable, tableProp;
for (var i = 0; i < defaultSettings.numberofTables; i++) {
newTable = $('<div id="table' + i + '"></div').css({ 'width': defaultSettings.tableSize.tableW + '%', 'height': defaultSettings.tableSize.tableH + '%', 'background-color': 'black' });
tableProp = { 'left': defaultSettings.tablePos.posX + '%', 'top': defaultSettings.tablePos.posY + '%', 'position': 'absolute', 'display': 'none' };
var availableSeats = [],
newSeat, seatProp;
var horPosArr = new Array(0, 5, 10);
var seatPosX, seatPosY;
function createSeats() {
for (var j = 0; j < 6; j++) {
if (j < 3) {
seatPosX = defaultSettings.tablePos.posX + horPosArr[j];
seatPosY = defaultSettings.tablePos.posY + 14;
} else {
seatPosX = defaultSettings.tablePos.posX + horPosArr[j - 3];
seatPosY = defaultSettings.tablePos.posY - 4.5;
}
newSeat = $('<div class="seat' + i + '"></div').css({ 'width': defaultSettings.seatSize.seatW, 'height': defaultSettings.seatSize.seatH, 'background-color': 'white', 'border': 'solid black 2px' });
seatProp = { 'left': seatPosX + 0.5 + '%', 'top': seatPosY + '%', 'position': 'absolute', 'display': 'none' };
newSeat.css(seatProp).appendTo('body').fadeIn(defaultSettings.speed);
availableSeats.push(newSeat);
}
return availableSeats;
}
availableSeats = createSeats();
另外,還有什麼我應該做的模塊化方法?這是一個fiddle。
我不認爲有嵌套函數相關的情況。您可以創建另一個函數,它將使用參數 – Vivick
內部函數使用來自外部函數的變量。將這些(如'horPosArr')作爲參數傳遞給您可以放在createTables之外的新函數。 – PeterMader
我還在學習這些東西,但是有一種方法可以考慮這個問題:https://jsfiddle.net/sheriffderek/hjeu6n9o/ - 這也可能是https://codereview.stackexchange.com/的一個很好的候選者。 //否則 - 你應該把問題進一步分解成更簡單的例子。 – sheriffderek