2015-11-04 26 views
0

我遇到了這段代碼,但是我在閱讀時遇到了麻煩,我從來沒有見過用這種方式編寫的代碼。Javascript函數寫約定

showMenuButton[isOpened ? "hide" : "show"](); 
hideMenuButton[isOpened ? "show" : "hide"](); 
isOpened ? container.removeClass("hideMenu") : container.addClass("hideMenu"); 

是不是一樣

if(isOpened="hide"){ 
showMenuButton(); 
} 
else{ 
hideMenuButton(); 
} 

有人能解釋代碼在做什麼,他們爲什麼寫這樣?僅僅因爲它們更短? (我從來沒有在函數調用中看到[]]。

謝謝。

這裏是完整的JavaScript代碼。

menuToggle = $("#menuToggle"), 
     showMenuButton = $(".menuToggle_show"), 
     hideMenuButton = $(".menuToggle_hide"), 
     toggleSideMenu = function (isOpened) { 

     showMenuButton[isOpened ? "hide" : "show"](); 
     hideMenuButton[isOpened ? "show" : "hide"](); 

     isOpened ? container.removeClass("hideMenu") : container.addClass("hideMenu"); 
     } 

回答

1

JavaScript有2 ways of referring to objects/method calls - 的點表示法和方括號標記。他們互換,和等效,所以下面的2線將是相同的

var x = someObject.someProperty; 
// or 
var x = someObject["someProperty"]; 

這也適用於方法,如此反覆follwoing兩人雙雙工作(注意,從上面的差別是調用方法括號)

someObject.someFunction(); 
// or 
someObject["someFunction"](); 

現在,回顧一下你的問題,還有另一個竅門:三元運營商:

var result = someCondition ? trueResult : falseResult 

把所有這些組合起來

showMenuButton[isOpened ? "hide" : "show"](); 
hideMenuButton[isOpened ? "show" : "hide"](); 

相當於

if(isOpened){ 
    showMenuButton["hide"](); // or, showMenuButton.hide(); 
    hideMenuButton["show"](); // or, hideMenuButton.show(); 
} 
else{ 
    showMenuButton["show"](); // or, showMenuButton.show(); 
    hideMenuButton["hide"](); // or, hideMenuButton.hide(); 
} 

(它基本上切換取決於它是否是當前處於打開狀態或不顯示/隱藏按鈕)

+0

你好,非常感謝你來清除該起來。他們是以這種方式寫作的理由嗎?似乎「if語句」更容易理解和調試。還是僅僅因爲它更短?用這種方式編寫代碼是否有任何複雜性,可能不太可能棄用,但是其他方面呢?謝謝 – hcythp

0

那些是對象存儲功能:

var functions={ 
    alertName:function(){ 
     alert('My name is Angel'); 
    }, 
    alertLastName:function(){ 
     alert('My last name is Cool'); 
    }, 
    alertMySite:function(){ 
     alert('angelcool.net'); 
    } 
} 

functions['alertMySite'](); 

http://jsfiddle.net/8ugav811/2/

0

是的,它正是這樣調用函數hide()show(),從jQuery對象,三元運營商並使其更加緊湊,最友好的代碼看,會是這樣的:

if(isOpened ){ 
    showMenuButton.hide(); 
    hideMenuButton.show(); 
    container.removeClass("hideMenu"); 
}else{ 
    showMenuButton.show(); 
    hideMenuButton.hide(); 
    container.addClass("hideMenu"); 
}