2012-01-27 63 views
1

目前,我有以下的javascript代碼(類似的目標是如何在should.js實現後鬆散建模)被稱爲:重構的javascript允許功能,而無需括號和不使用「得到」

var example = function() { 
    var isFoo, isBar; 

    return { 

     baz: function(x) { 
      if (isFoo) return x + 2; 
      else if (isBar) return x - 2; 
     }, 

     get foo() { 
      isFoo = true; 
      return this; 
     }, 

     get bar() { 
      isBar = true; 
      return this; 
     }, 
    } 
}; 

這使得我做這樣的事情:

example().foo.baz(2); 
// 4 

我的首要目標是讓foobar被稱爲不需要括號,因爲他們絕不會採取任何參數本身和品牌鏈接在一起調用了更多的可讀性。當我通過uglify.js傳遞此代碼時,它在get關鍵字上ch咽,當我調查時發現使用get關鍵字並不是一個好主意(兼顧性能和兼容性)。

關於如何重構這段代碼的任何想法,以便我可以繼續撥打foobar而不用括號,也不要訴諸使用get關鍵字?我已經嘗試將foo和bar定義爲屬性,但無法弄清楚如何使其工作。

+0

你基本上是問如何使語言工作的方式,它不想工作。 – Pointy 2012-01-27 21:06:07

+0

國際海事組織,你應該只使用括號。這表明foo和bar是特殊的,並且更符合需要參數的東西('example()。foo('param')。baz()')。無論如何,如果你想用自定義的DSL去瘋狂,我不確定限制自己流暢的界面是最通用的解決方案。 – hugomg 2012-01-27 22:36:24

+0

我只是希望保存一些按鍵,但顯然不值得。括號是! – Bill 2012-01-27 22:41:37

回答

2

你可以使用__defineGetter__,但這也不是一個非常好的主意。 Firefox有一些新的元編程API,但在任何其他瀏覽器中都無法使用。

基準是,如果您希望代碼在舊瀏覽器中運行,則無法完成此操作。

+0

這就是我想象的。感謝您的確認! – Bill 2012-01-27 22:39:41